大家一定經常在網絡上看到很多網站的地址后綴都是用XX.HTML或者XX.ASPX等類似靜態文件的標示來操作的吧,那么大家有懷疑過他真的是一個一個的靜態生成的文件么,靜態文件的生成的優缺有好有壞,對于訪問量很大的網站,利用靜態文件可提高服務器的運行穩定和速度,壞處就是生成列表的時候會因為增加一條記錄從而需要所有相關的列表進行重構,當然不排除有的公司已經攻克的這個問題,但對于大眾程序員來說,他依舊是個問題,而且生成的化對于中小型網站也不一定會比動態的號,因為管理比較麻煩。
結構以上事實,然后偽靜態技術產生了,規范的說就是URL重寫技術,他對于ASPX格式支持最好,當然也可以重寫HTML格式的文件,但這需要IIS的設置,相對比來說,ASPX格式的更方便,本站就是采用了該URL重寫技術,這個技術優點顯而易見:方便搜索引擎收錄,方便查看,等等。那么接下來我們來看看如何配置他吧
首先、我們要用到URL重寫組件:URLRewriter.rar
其次、需要在WEB.CONFIG里面進行些設置:
1、在Web.Config的<system.web>和</system.web>添加以下節點:
<httpHandlers> <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /></httpHandlers>2、在Web.Config的<configuration>和</configuration>添加以下節點:
<configSections> <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> </configSections> <RewriterConfig> <Rules> <RewriterRule> <LookFor>~/d(/d+)/.html</LookFor> <SendTo>~/Default.aspx?MyID=$1</SendTo> </RewriterRule> </Rules> </RewriterConfig>設置完以上兩個步驟,就基本可以運行了,其中<RewriterRule/>標簽里面就是重寫的一個模塊,<LookFor/>里面的是重寫后的地址,而<SendTo/>則是原地址。
3、配置IIS解析.html文件IIS配置:網站->屬性->虛擬目錄->配置(G)...->映射->通配符應用程序映射->添加可執行文件:c:/windows/microsoft.net/framework/v2.0.50727/aspnet_isapi.dll擴展名為:.html
確認文件是否存在:不選.
4、以上配置好之后就可以通過以下方式來訪問了
例如用戶輸入 hostname/d11.html,服務器會把他重寫為http://hostname/default.aspx?id=11。換句話說用戶輸入http://hostname/d11.html,實際訪問的是http://hostname/default.aspx?id=11
5、分頁必須引用以下方法
ActionlessForm.dll
namespaceActionlessForm{publicclassForm:System.Web.UI.HtmlControls.HtmlForm{創建此類并對其進行編譯之后,要在 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)。從方法名我想也能猜到它是做什么的。輸入如下代碼:
protectedvoidApplication_BeginRequest(Objectsender,EventArgse){stringoldUrl=HttpContext.Current.Request.RawUrl;stringpattern=@"^(.+)default/(/d+)/.aspx(/?.*)*$";stringreplace="$1default.aspx?id=$2";if(Regex.IsMatch(oldUrl,pattern,RegexOptions.IgnoreCase|RegexOptions.Compiled)){stringnewUrl=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就可以幫你實現,并且這一切不需要多少的代碼。
新聞熱點
疑難解答