大家一定經常在網絡上看到很多網站的地址后綴都是用XX.HTML或者XX.ASPX等類似靜態文件的標示來操作的吧,那么大家有懷疑過他真的是一個一個的靜態生成的文件么,靜態文件的生成的優缺有好有壞,對於訪問量很大的網站,利用靜態文件可提高服務器的運行穩定和速度,壞處就是生成列表的時候會因為增加一條記錄從而需要所有相關的列表進行重構,當然不排除有的公司已經攻克的這個問題,但對於大眾程序員來說,他依舊是個問題,而且生成的化對於中小型網站也不一定會比動態的號,因為管理比較麻煩。
結構以上事實,然后偽靜態技術產生了,規范的說就是URL重寫技術,他對於ASPX格式支持最好,當然也可以重寫HTML格式的文件,但這需要IIS的設置,相對比來說,ASPX格式的更方便,本站就是采用了該URL重寫技術,這個技術優點顯而易見:方便搜索引擎收錄,方便查看,等等。那么接下來我們來看看如何配置他吧
首先你要在你的項目里引用兩個DLL:
ActionlessForm.dll
真正實現重寫的是 URLRewriter.dll 但是如果你要實現分頁,那么必須使用這個ActionlessForm.dll
{
public class Form : System.Web.UI.HtmlControls.HtmlForm
{
protected override void RenderAttributes(HtmlTextWriter writer)
{
writer.WriteAttribute( "name", this.Name);
base.Attributes.Remove( "name");
writer.WriteAttribute( "method", this.Method);
base.Attributes.Remove( "method");
this.Attributes.Render(writer);
base.Attributes.Remove( "action");
if ( base.ID != null)
writer.WriteAttribute( "id", base.ClientID);
}
}
}
創建此類並對其進行編譯之后,要在 ASP.NET Web 應用程序中使用它,應首先將其添加到 Web 應用程序的 References 文件夾中。然后,要 使用它來代替 HtmlForm 類,做法是在 ASP.NET 網頁的頂部添加以下內容:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %> 然后,將 <form runat="server">(如果有)替換為: <skm:Form id="Form1" method="post" runat="server"> 並將右邊的 </form> 標記替換為:</skm:Form>
在網上看到,很多朋友在asp.net中做urlrewrite,用的是HttpHandle+Server.Transfer的方法。其實這種方法是錯誤的。
第一,HttpHandle是實現不了urlrewrite的;
第二Server.Transfer是標准的重定向,根本不是urlrewrite。
其實,實現urlrewrite不用自己HttpHandle,也不用自己實現HttpModule,用幾行代碼就可以輕松實現。我這里介紹的是在虛擬主機上,虛擬主機不同於自己的服務器,你是沒有權限去修改iis,也沒有權限去安裝iis rewrite之類的iis插件。但是我們仍然可以輕松完成需要的功能。具體做法如下:打開global.asax.cs,定位到protected void Application_BeginRequest(Object sender, EventArgs e)。從方法名我想也能猜到它是做什么的。輸入如下代碼:
{
string oldUrl = HttpContext.Current.Request.RawUrl ;
string pattern = @"^(.+)default/(\d+)\.aspx(\?.*)*$";
string replace = "$1default.aspx?id=$2"; if(Regex.IsMatch(oldUrl, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
string newUrl = Regex.Replace(oldUrl, pattern, replace, RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(newUrl);
}
}
有了上邊這段代碼,我訪問一個類似:.../default/123.aspx 的網址,當然這個網址在我的電腦上不存在,它就會被定向到:.../default.aspx?id=123。
當然,利用功能強大的正則表達式,你可以任意按照自己的需要來重寫url,這一切都是在服務器端默默的進行,在客戶端是不會有任何察覺的。由於是在虛擬主機上,我們只能重定向.aspx文件,如果是自己的服務器,只要把后綴名在iis中注冊一下,就可以實現任意后綴名的處理。比如你可以注冊一個*.myweb這樣的類型,這樣別人訪問default/456.myweb時,你可以把它重定向到default.aspx?id=456。總之一句話,只要你能想到,.net就可以幫你實現,並且這一切不需要多少的代碼。