URL重寫技術總結
概要:什么是url重寫?
URL 重寫是截取傳入 Web 請求並自動將請求重定向到其他 URL 的過程。比如瀏覽器發來請求 hostname/101.html ,服務器自動將這個請求中定向為http://hostname/list.aspx ?id=101。
url重寫的優點在於:
1、縮短url,隱藏實際路徑提高安全性。
2、易於用戶記憶和鍵入。
3、易於被搜索引擎收錄。
正文:實現url重寫的基本方法:
一、 下載ms的URLRewriter.dll,放到你的web程序的bin下
下載地址1:
download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
下載地址2:
或者直接使用DLL:http://files.cnblogs.com/yun_shuai/URLRewriter.rar 含有上面2個DLL。
二、 webconfig中配置:
1、 <configSections> 節點中增加:
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
注:一定要正確,名字(RewriterConfig)要與下面的重寫名稱<RewriterConfig>一致。
2、<configuration>根節點中增加URL重寫的配置: 可以使用正則表達式
<RewriterConfig> <Rules>
<RewriterRule> <LookFor>~/ (\d{2})/(\d+)\.html</LookFor> <SendTo>~/ShowBlogContent.aspx?year=$1&month=$2</SendTo> </RewriterRule>
<RewriterRule> <LookFor>~/(\d+)\.html</LookFor> <SendTo>~/ShowBlogContent.aspx?year=$1</SendTo> </RewriterRule> </Rules>
</RewriterConfig>
注:每一個URL都要有頭 ( <RewriterRule>),有尾(</RewriterRule>)。
多參數直接用&相連接,切勿只用&!
盡量用少的語句,重寫多的頁面URL。
關鍵句解析:
“<LookFor>~ShowBlog/(\d{2})/(\d+)\.html</LookFor> <SendTo>~/ShowBlogContent.aspx?year=$1&month=$2</SendTo>”
①、<LookFor>~ ShowBlog /(\d{2})/(\d+)\.html </LookFor> 表示,用戶請求的url(ShowBlog可任意寫)。~/(\d+)\.html是url中文件名匹配的正則表達式(此處為字母d開頭,后面跟一個或多個數字,{2}表示數字的位數是兩位,並以.html結尾。用戶也可根據自己的需要自行設定)。 ②、<SendTo>~/ShowBlogContent.aspx?year=$1&month=$2</SendTo>,表示當服務器接收到符合上面條件的請求后如何重寫url。此處表示訪問ShowBlogContent.aspx並傳入參數year和month,其值$1將用用戶請求的文件名中的第一個數(\d{2})字來表示,$2為第二個數字(\d+),多參以此類推。 ③、例如用戶輸入 hostname/d11.aspx,服務器會把他重寫為http://hostname/default.aspx?id=11。換句話說用戶輸入http://hostname/d11.aspx,實際訪問的是http://hostname/default.aspx?id=11。這樣就起到了隱藏真實文件名,並便於用戶記憶的作用。
注:也可以不用帶參數,原理同上。
例:“<LookFor>~ShowBlog.html</LookFor> <SendTo>~/ShowBlogContent.aspx</SendTo>”
3、<httpModules> 增加 <add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
或者 <httpHandlers> 增加 <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
注:這是對以.html結尾的URL進行匹配重寫(編者更傾向於第二種方法)。
4、修改頁面中的請求路徑URL
例:“<a href=" ShowBlog /<%=Request["BlogType"] %>/<%#Eval("BlogID") %>.html">”
5、完成
6、其他問題:
回發后真實路徑再現:
1、將ActionlessForm.dll添加到項目的bin文件夾
2、在aspx網頁的代碼中加<%@ Register TagPrefix="RW" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
3、然后將form標簽改為RW:Form(注意開始和結束都要改),TagPrefix可以自定義
注:編者暫時沒有用到,讀者可以根據個人需要自行修改。
三、總結
首次重寫URL的時候一定要每一個細節都要考慮到,特別是路徑的問題,讀者應該有足夠的耐心和細心,這樣才能使自己的努力事半功倍。
編者參考網址:
1、 偽靜態實現方法_百度文庫
2、 使用URLRewriter實現URL重寫 - 雲帥工作室 - 博客園
3、 ASP.NET URL Rewrite. URL重寫_Karl’s 備忘錄_百度空間
4、 談用偽靜態(url重寫)的方法替代生成靜態頁面的好處 - A5站長網
四、附:詳情見源代碼。