close
 
UrlRewrite有什麼用處?
1、滿足搜索引擎的要求
某些搜索引擎不能支持動態頁面的抓取,大量的信息就不能被潛在用戶搜索到。用UrlRewrite技術你可以把 http://server/news.asp?id=111 變成 http://server/news/111.htm 這樣他們就會被搜索引擎收錄了。google雖然可以抓取動態頁面,但是google對動態頁面的評分一般低於靜態頁面。所以,對大量信息發佈的網站,把網站地址改變成靜態的絕對是值得的。
2、隱藏技術實現,提高網站的移植性
每個頁面都掛著鮮明的.asp/.jsp這種開發語言的標記,可以一眼讓人看出你的網站使用什麼語言做的。而且在改變網站的語言的時候,你需要改動大量的鏈接。而且,一個頁面修改了擴展名,他的pagerank也會隨之消失,從頭開始。我們可以用UrlRewrite技術隱藏我們的實現細節,這樣修改移植都很方便,而且完全不損失pagerank。
3、滿足美感的要求
對於追求完美主義的網站設計師,即使是網頁的地址也要看起來簡潔明快。形如 http://server/news.asp?channel=3&id=111 的網頁地址,肯定是上不了完美主義者的法眼的,用UrlRewrite技術,你可以把他變成 http://server/news/3/111.htm
1.下載ISAPI_Rewrite.ISAPI_Rewrite分精簡(Lite)和完全(Full)版.精簡版不支持對每個虛擬主機站點進行重寫,只能進行全局處理.不過對於有服務器的朋友,精簡版也就夠啦.精簡版下載地址:http://www.helicontech.com/download/ ,就是
ISAPI_Rewrite 3 Lite Freeware!
read on specific limitations
(也可以自己選擇合適的了)
2.安裝.msi的文件,和裝一般程序一樣裝就可以了,俺裝在D:\Program Files\Helicon\ISAPI_Rewrite3\ .
3.接下來一步比較重要哦。打開Internet 信息服務,右鍵web站點屬性,點ISAPI篩選器選項卡.添加篩選器,名稱自己填,路逕自己指定ISAPI_Rewrite.dll,然後確定。 (這裡如果iis是6.0且ISAPI_Rewrite是 高版本的話安裝的時候軟件會自動添加上去,並且還會在web站點屬性裡添加一個ISAPI_Rewrite選項卡。而低版本的要手動添加了)(哈哈我的是高版本的 )
4.來測試一下.新建一個test.asp,裡面寫上
<%=request.querystring("info")%>
效果就是執行的時候test.asp?info=自己手動輸入的內容(頁面會得到並顯示)
5.這一步很重要哦,開始添加rewrite規則(即RewriteRule)
打開Internet 信息服務,右鍵web站點屬性,點ISAPI_Rewrite 選項卡, 打開編輯(Edit).將下面代碼複製上去保存
(我們要把test.asp?info=hello映射成為test-hello.html這樣的類型),
RewriteRule /test-([0-9,a-z]*).html /test.asp\?info =$1
點擊應用然後保存
6.到瀏覽器裡查看一下效果吧.輸入http://localhost/test.asp?info=hellohttp://localhost/test-hello.html ,顯示的內容是不是都是hello ?這就證明成功啦!(如果不行可以重啟iis再試下)
注:這種方式我修改服務器的配置(沒有自己的服務器就沒辦法了),下面推薦一種新的方法(用代碼實現)!
方法二:使用HttpModule實現URL重寫
利用ASP.NET提供的HttpContext.RewritePath方法。這個方法允許開發人員動態地重寫收到的URL的處理路徑,然後讓ASP.NET使用剛重寫過後的路徑來繼續執行請求。 譬如,我們可以選擇向大眾呈示下列URL:
http://www.store.com/products/Books.aspx
http://www.store.com/products/DVDs.aspx
http://www.store.com/products/CDs.aspx
在外界看來,網站上有三個單獨的網頁(對搜索爬蟲而言,這看上去很棒)。通過使用 HttpContext的RewritePath方法,我們可以在這些請求剛進入服務器時,動態地把收到的URL重寫成單個Products.aspx網頁接受一個查詢字符串的類別名稱或者PathInfo參數。譬如,我們可以使用Global.asax中的 Application_BeginRequest事件,來這麼做:
    void Application_BeginRequest( object sender, EventArgs e) {
string fullOrigionalpath = Request.Url.ToString() ;
         if (fullOrigionalpath.Contains( "/Products/Books.aspx" )) {
             Context.RewritePath( "/Products.aspx?Category=Books" ) ;
}
else if (fullOrigionalpath.Contains( "/Products/DVDs.aspx" )) {
             Context.RewritePath( "/Products.aspx?Category=DVDs" ) ;
}
     }
手工編寫象上面這樣的編碼的壞處是,很枯燥乏味,而且容易犯錯。我建議你別自己寫,而是使用網上現成的HttpModule來完成這項工作。這有幾個你現在就可以下載和使用的免費的HttpModule:
   UrlRewriter.net
   UrlRewriting.net
   這些模塊允許你用聲明的方式在你應用的web.config文件裡表達匹配規則。譬如,在你應用的web.config文件裡使用 UrlRewriter.Net模塊來把上面的那些URL映射到單個Products.aspx頁上,我們只要把這個web.config文件添加到我們的應用裡去就可以了(不用任何編碼):
  
  
   <?xml version="1.0"?>
  
   <configuration>
  
   <configSections>
   <section name="rewriter" requirePermission="false"     type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
   </configSections>
  
   <system.web>
  
   <httpModules>
   <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
   </httpModules>
  
   </system.web>
  
   <rewriter>
   <rewrite url="~/products/books.aspx" to="~/products.aspx?category=books" />
   <rewrite url="~/products/CDs.aspx" to="~/products.aspx?category=CDs" />
   <rewrite url="~/products/DVDs.aspx" to="~/products.aspx?category=DVDs" />
   </rewriter>
  
   </configuration>
  
   上面的HttpModule URL重寫模塊還支持正則表達式和URL模式匹配(以避免你在web.config 文件裡硬寫每個URL)。所以,不用寫死類別名稱,你可以像下面這樣重寫匹配規則,把類別名稱動態地從任何/products/[類別].aspx組合的 URL裡取出來:
  
  
   <rewriter>
   <rewrite COLOR: red">aspx" to="~/products.aspx?category=$1" />
   </rewriter>
  
  
   這使得你的編碼極其乾淨,並且擴展性非常之好。
樣例下載
注意:(1)一些圖片、css路徑要注意
(2)上傳到服務器時不要忘了上傳web.config
(3)如果要重寫html,這個要在IIS裡配置一下就是把處理的html文件,轉交到asp.net來處理!
arrow
arrow
    全站熱搜

    icejuly 發表在 痞客邦 留言(0) 人氣()