ASP.NET的UrlRewrite URL重寫僞靜態實例

大家一定經常在網絡上看到很多網站的地址後綴都是用XX.HTML或者XX.ASPX等類似靜態文件的標示來操作的吧,那麼大家有懷疑過他真的是一個一個的靜態生成的文件麼,靜態文件的生成的優缺有好有壞,對於訪問量很大的網站,利用靜態文件可提高服務器的運行穩定和速度,壞處就是生成列表的時候會因爲增加一條記錄從而需要所有相關的列表進行重構,當然不排除有的公司已經攻克的這個問題,但對於大衆程序員來說,他依舊是個問題,而且生成的化對於中小型網站也不一定會比動態的號,因爲管理比較麻煩。

結構以上事實,然後僞靜態技術產生了,規範的說就是URL重寫技術,他對於ASPX格式支持最好,當然也可以重寫HTML格式的文件,但這需要IIS的設置,相對比來說,ASPX格式的更方便,本站就是採用了該URL重寫技術,這個技術優點顯而易見:方便搜索引擎收錄,方便查看,等等。那麼接下來我們來看看如何配置他吧

首先、我們要用到URL重寫組件:URLRewriter.rar

其次、需要在WEB.CONFIG裏面進行些設置:

1、在Web.Config的<system.web>和</system.web>添加以下節點:

 
  1. <httpModules> 
  2.       <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" /> 
  3.     </httpModules> 

2、在Web.Config的<configuration>和</configuration>添加以下節點:

 
  1. <configSections> 
  2.   <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> 
  3. </configSections> 
  4.  
  5. <RewriterConfig> 
  6.   <Rules> 
  7.     <RewriterRule> 
  8.       <LookFor>~/Read(.[0-9]*)\.aspx</LookFor> 
  9.       <SendTo>~/read.aspx?id=$1</SendTo> 
  10.     </RewriterRule> 
  11.     <RewriterRule> 
  12.       <LookFor>~/Read,(.[0-9]*),(.[0-9]*)\.aspx</LookFor> 
  13.       <SendTo> 
  14.         <![CDATA[~/read.aspx?id=$1&SmallSortID=$2]]> 
  15.       </SendTo> 
  16.     </RewriterRule> 
  17.   </Rules> 
  18. </RewriterConfig> 

設置完以上兩個步驟,就基本可以運行了,其中<RewriterRule/>標籤裏面就是重寫的一個模塊,<LookFor/>裏面的是重寫後的地址,而<SendTo/>則是原地址。大家應該注意到了我寫了2組<RewriterRule/>,其中第一組的是給單參數的地址用的,而另一組是給多參數動態文件用的。

用此方法注意:
1.不能使用Windows身份驗證用戶權限. 應使用Form驗證,在web.config配置爲:<authentication mode="Forms" />
2.使用Request.ServerVariables["script_name"]獲得的路徑仍然是:ShowPlay.asp?vid=1
3.被重寫的地址如果回發,重寫將失效 顯示的地址將是ShowPlay.asp?vid=1
4. 後綴名必須爲.aspx.如果是其他自定義後綴名,如.net  請在iis將.net映射到aspnet_isapi.dll.這樣.net請求才能
到達asp.net引擎.

另外的一些提示:
很多朋友應該看到過類似這樣的地址:
http://nmju.net/read/2007/07/11/135645/
其實這個也同樣的重寫,只是這個的使用必須要跟着建立相應的目錄,譬如上面的這個地址,你必須要建立READ、2007、07、11、135645這些目錄,雖然裏面不需要存在文件,但建立還是有必要的

(一)、擴展名不變的重寫:
重寫規則:

<add name="RewritePhoto" virtualUrl="^~/(\d+).aspx"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />

IIS配置:(此配置應該爲默認配置,但有的虛擬主機提供商修改了此配置)
網站->屬性->目錄->配置(G)...->映射->應用程序擴展->擴展名 .aspx ->編輯->"確認文件是否存在"複選框不選
(二)、僞靜態重寫,擴展名爲.html等
重寫規則:

<add name="RewritePhoto" virtualUrl="^~/(\d+).html"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />

IIS配置:網站->屬性->目錄->配置(G)...->映射->應用程序擴展->添加
可執行文件:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
擴展名:.html
動作:限制爲 GET,HEAD,POST,DEBUG
腳本引擎:選中
確認文件是否存在:不選
(三)、任意擴展名的重寫 如:擴展名爲.zxjay
重寫規則:

<add name="Rewrite1" virtualUrl="^~/(\d+).zxjay"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />
  


IIS配置:同上
(四)、無後綴的重寫
重寫規則:

<add name="Rewrite1" virtualUrl="^~/(\d+)/Default.aspx"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />


IIS配置:網站->屬性->目錄->配置(G)...->映射->通配符應用程序映射->插入
可執行文件:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
確認文件是否存在:不選
(五)、二級域名到多級域名的重寫
(注意:由於條件的限制,該規則沒有測試,理論上可以實現,如果有錯誤,請留言指正,謝謝!)
重寫規則:

<add name="Rewrite1" virtualUrl="^http\://(.*).xianfen.net/Default.aspx"
     rewriteUrlParameter
="ExcludeFromClientQueryString"
     destinationUrl
="~/Default.aspx?ID=$1"
     ignoreCase
="true" />


-------------------------------------------------------------

由於URL重寫爲.html需要對IIS設置ISAPI。只需要重寫爲.aspx後綴,可不對IIS進行設置
IIS配置:網站->屬性->目錄->配置(G)...->映射->通配符應用程序映射->插入
可執行文件:c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll 擴展名:.html
確認文件是否存在:不選   限制爲:GET,HEAD,POST,DEBUG
本文來源於:C# .net學習之旅 http://www.ligang.net.cn 原文地址:http://www.ligang.net.cn/200903/29.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章