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