|
我們在進行Web程序開發時,為了進行搜索引擎優化(SEO),往往需要對web的訪問地址進行優化,如將http://localhost/Default.ASPx?tab=performance修改為http://localhost/Default_performance.ASPx,后一個地址能夠更好地被搜索引擎搜索到,從而達到了搜索引擎優化的目的。微軟有一個開源類庫URLRewriter可以非常方便地實現url改寫,通過配置在web.config文件中的映射表將用戶的請求重定向到具體的頁面中,我在“使用URLRewriter進行URL重寫失效”一文中詳細介紹了如何使用這個類庫,該類庫是通過ASP.NET的httpmodules或httphandles來執行的,但如果網站的宿主服務器不支持ASP.NET httpmodules和httphandles,則該功能便失效了,這時我們可以通過global中的application_beginrequest事件來進行url重定向。本文在URLRewriter類庫的基礎上進行了改進,并給出了一個相對完整的解決方案。
我們的改進是建立在URLRewriter的基礎之上的,所以URLRewriter原有的東西只要能用,我們都可以直接拿過來,當然,不好的東西要摒棄!
URLRewriter的映射表是直接寫在web.config文件中的,要讓web.config能識別映射表,必須在configSections節中添加section,告訴程序如何正確解析web.config中未被識別的內容,如原URLRewriter就需要在web.config中添加。我覺得這個方式并不好,首先你需要單獨去編寫一個類庫來解析xml,并在web.config中進行配置,我們完全可以省去這一步。url的映射表可以單獨寫到一個xml文件中,當程序運行時將xml加載到應用程序緩存中,并設置一個緩存文件依賴項,這樣每當管理員修改完映射表后就可以馬上生效。
另外我希望支持url的雙向改寫,即上面提到的兩個url,當用戶輸入第二個url時程序會將請求發送到第一個url,但瀏覽器中顯示的url不變;當用戶輸入第一個url時,自動跳轉到第二個url,此時瀏覽器中顯示的是第二個url,但是請求仍然是第一個url。聽起來是不是有點繞啊?沒關系,其實也很簡單,基本的需求就是說客戶原來網站中的很多頁面在訪問時都帶了很多參數,做url改寫時都換成新的url了,這時舊的url仍然可以用,客戶想的就是當輸入原來舊的url時能自動跳轉到新的url。這個就是url的雙向改寫!這兩種方式可以分別通過Context.RewritePath()和Context.Response.Redirect()方法來實現,下面我們來看具體的實現。
首先是映射表的實現。我在URLRewriter原有映射表的基礎上做了一點改動,就是給ReWriterRule添加了一個IsDirect屬性,該屬性可選,默認值為False,當值為真時如果用戶請求的url匹配則會進行跳轉,否則只是進行請求映射。
xml version="1.0"?><ReWriterConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Rules>
<ReWriterRule>
<LookFor>~/Default_(/w+)/.ASPxLookFor>
<SendTo>~/Default.ASPx?tab=$1SendTo>
ReWriterRule>
<ReWriterRule IsDirect="true">
<LookFor>~/Default/.ASPx/?tab=(/w+)LookFor>
<SendTo>~/Default_$1.ASPxSendTo>
ReWriterRule>
Rules>
ReWriterConfig>
NET技術:ASP.NET URL雙向改寫的實現,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。