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