資料參考:http://msdn.microsoft.com/zh-cn/library/ms972974.aspx
樣本:URLRewriter樣本.rar
=======================================Url重寫==========================================
1.首先下載URLRewriter.rar,下載之後直接複製到你的網站的bin目錄
2.配置你的web.config檔案
在<configuration>節點下加
Code
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
</configSections>
<!--轉寄規則-->
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/Url.html</LookFor>
<SendTo>~/Url.aspx?id=aa</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
注意在web.config中把&換為&否則不能執行
同時還要在<system.web>配置節下加
Code
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
<add verb="*" path="*" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
最後配置IIS映射,右擊網站-屬性-主目錄-配置-插入,把複製的檔案即C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll,
複製到可執行檔框內,同時去掉確認檔案是否存在,確定即可
3.*映射要注意的問題
因為*映射是把所有的檔案都要交給url稱謝程式去處理,這樣就會造成會把網站下的圖片以及css或者一些下載的rar等檔案都要去處理,造成效能不佳
解決辦法:
方法1,把存放圖片所在的檔案夾轉化成一個虛擬目錄,在然後移處該虛擬目錄*.*的映射,這樣一來他的url重寫程式就不會去處理圖片檔案,當然存放別的不需要url重寫程式的檔案也要象圖片檔案夾做類似的處理。
虛擬目錄設定辦法:在iis網站--右擊該目錄--屬性--目錄--建立--配置,在快顯視窗內刪除:萬用字元應用程式對應(執行順序)下添加的*.*的映射即可。
方法2,把不需要*.*映射的檔案夾設定新網站和原來的網站分開,這樣在原來的網站訪問的時候用
新網站的網域名稱即可。比如把圖片佈建網站http://images.abc.com/ 這樣在http://abc.com/網站訪問圖片的時候就必須使用http://images.abc.com/圖片名稱.gif,這樣就避免了所有問件處理。
以上兩種方法即可提高不少速度,當然第一種更方便。
4.最後處理回傳,即是指當我們在一個經過url重寫的頁面的提交返回後,一般情況下又返回了真實的路徑,而不是咱們處理過的url地址,這種情況就需要咱們在需要處理回傳(即提交表單的頁面)的頁面加上以下代碼即可:
<script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script>
放在<form></form>裡面
比如http://www.abc.com/photo/50/show_1.html 這個頁面是經過url重寫之後的,使用者留言之後(提交表單)如果不做處理就變成了原始的路徑了,如:http://www.abc.com/photo/Detail.aspx?ptid=50&page=1 所以我們要處理回傳的情況。
=======================================次層網域======================================
微軟的URLRewrite能夠對URL進行重寫,但是也只能對網域名稱之後的部分進行重寫,而不能對網域名稱進行重寫,
如:可將 http://http://www.abc.com//1234/ 重寫為 http://www.abc.com/show.aspx?id=1234
但不能將 http://1234.abc.com/ 重寫為 http://www.abc.com/show.aspx?id=1234。
要實現這個功能,前提條件:
1. http://www.abc.com/ 是泛解析的,將*.abc.com做為A記錄綁定IP(這是網域名稱空間管理操作)
2. 當前網站為預設網站(即只需要輸入IP即可訪問),網站的第一個主機頭值必須為空白,否則會出現錯誤的請求。
3. 增加*映射(參照上面)
以上條件都滿足,則在web.config中增加
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
配置轉寄規則
Code
<!--轉寄規則-->
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>http://(\w+).abc.com/</LookFor>
<SendTo>~/Url.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
IE地址欄輸入http://1234.abc.com/,則實際訪問的是http://www.abc.com/URL.aspx?id=1234