服務(wù)熱線
153 8323 9821
經(jīng)常有人請(qǐng)我指導(dǎo)應(yīng)該如何動(dòng)態(tài)地“重寫”URL,以在他們的ASP.NETweb應(yīng)用中發(fā)布比較干凈的URL端點(diǎn)。這個(gè)博客帖子概述了幾個(gè)方法,你可以用來在ASP.NET中干凈地映射或重寫URL,以及按照你自己的需求組織你的URL的結(jié)構(gòu)。
下面是開發(fā)人員想要對(duì)URL有更大的靈活性的最常見的場(chǎng)景:
1) 處理這樣的情形:你要更改你的web應(yīng)用中網(wǎng)頁(yè)的結(jié)構(gòu),但你同時(shí)也要確保在你移動(dòng)網(wǎng)頁(yè)后,那些被人收藏的老URL不會(huì)成為死鏈接。重寫URL允許你透明地將請(qǐng)求轉(zhuǎn)交到新的網(wǎng)頁(yè)地址而不出錯(cuò)。
2) 在象Google,Yahoo 和 Live 這樣的搜索引擎中提高你網(wǎng)站上網(wǎng)頁(yè)的搜索相關(guān)性。具體地來說,URL重寫經(jīng)常能使你在你網(wǎng)站上網(wǎng)頁(yè)的URL里更加容易地嵌入關(guān)鍵詞,這么做往往會(huì)增加別人點(diǎn)擊你的鏈接的機(jī)會(huì)。從使用查詢字符串參數(shù)到使用完全限定(fully qualified)的URL也能在某些情形下提高你在搜索引擎結(jié)果中的優(yōu)先順序。使用強(qiáng)制referring鏈接使用同樣的大小寫(same case)和URL入口(譬如,使用weblogs.asp.net/scottgu 而不是 weblogs.asp.net/scottgu/default.aspx)的技術(shù)也能避免因跨越多個(gè)URL而造成的網(wǎng)頁(yè)排名(pagerank)的降低(avoid diluting your pagerank across multiple URLs),從而增加你的搜索結(jié)果。
在一個(gè)搜索引擎日漸驅(qū)動(dòng)網(wǎng)站訪問量的世界里,在你的網(wǎng)頁(yè)排名上稍微得到一些提高就能給你的業(yè)務(wù)帶來不錯(cuò)的投資回報(bào)(ROI)。逐漸地,這驅(qū)使開發(fā)人員使用URL重寫以及其他SEO(搜索引擎優(yōu)化 )技術(shù)來優(yōu)化網(wǎng)站(注,SEO是個(gè)步調(diào)很快的空間,增加你的搜索相關(guān)性的建議月月在演變)。想了解一些關(guān)于搜索引擎優(yōu)化方面好的建議的話,我建議你閱讀一下《SSW Rules to Better Google Rankings (SSW的提高Google排名之要領(lǐng))》,以及MarketPosition關(guān)于《how URLs can affect top search engine ranking (URL會(huì)如何影響頂級(jí)搜索引擎排名)》的文章。
為這個(gè)博客貼子起見,我將假設(shè)我們將在一個(gè)應(yīng)用里建造一套電子商務(wù)的產(chǎn)品目錄網(wǎng)頁(yè),產(chǎn)品是按種類來組織的(譬如,圖書,錄像,CD,DVD等等)。
讓我們假定一開始我們有個(gè)網(wǎng)頁(yè)叫Products.aspx,通過查詢字符串參數(shù)接受一個(gè)類別名稱,相應(yīng)地過濾顯示的產(chǎn)品。與這個(gè)Products.aspx網(wǎng)頁(yè)對(duì)應(yīng)類別的URL看上去象這樣:
但我們不想使用查詢字符串來呈示每個(gè)類別,我們想修改應(yīng)用,讓每個(gè)產(chǎn)品類別對(duì)搜索引擎來說看上去象是一個(gè)獨(dú)特的URL,并且在實(shí)際的URL中嵌入關(guān)鍵詞(而不是通過查詢字符串參數(shù))。我們將在這個(gè)博客帖子剩下來的篇幅里,討論一下達(dá)成這個(gè)目的我們可以采取的4種不同方法。
方法一:使用Request.PathInfo 參數(shù)而不是查詢字符串
我將示范的第一個(gè)方法根本不使用URL重寫,而是使用ASP.NET中不太為人所知的一個(gè)特性,Request的PathInfo屬性。為幫助解釋這個(gè)屬性的有用之處,考慮一下我們電子商店下面這些URL的情形:
你會(huì)在上面這些URL中注意到的一個(gè)東西是,他們不再含有查詢字符串值,取而代之的是,類別參數(shù)的值是附加到URL上的,是以 Products.aspx網(wǎng)頁(yè)處理器名稱之后的/參數(shù) 值的方式出現(xiàn)的。然后,一個(gè)自動(dòng)化的搜索引擎爬蟲(search engine crawler)會(huì)把這些URL解釋成三個(gè)不同的URL,而不是一個(gè)URL帶有三個(gè)不同的輸入值 (搜索引擎是不理會(huì)文件擴(kuò)展名的,只把它當(dāng)作URL中的另一個(gè)字符而已)。
你也許很想知道怎么在ASP.NET中處理這個(gè)附加的參數(shù)的情形。好消息是,這非常簡(jiǎn)單。只要使用Request的PathInfo屬性就可以了,該屬性返回URL中緊隨 products.aspx 后面的那部分內(nèi)容。所以,對(duì)上面這些URL, Request.PathInfo會(huì)分別返回 “/Books”, “/DVDs”,和 “/CDs”(萬一你想知道的話, Request的Path 屬性返回“/products.aspx” )。
然后,你可以輕易地編寫一個(gè)函數(shù)來獲取產(chǎn)品類別,象這樣(下面這個(gè)函數(shù)去除前面的斜杠字符,只返回“Books”,“DVDs”,或 “CDs”):