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 。
IIS 5.0支援UrlRewrite嗎?
答案很簡單,不支援。但是我們可以通過安裝伺服器擴充讓IIS支援。
目前有兩種產品支援IIS 5.0的UrlRewrite,isapi_rewrite 和 IIS Rewrite。
isapi_rewrite: http://www.helicontech.com/download/#isapi_rewrite
IIS Rewrite :http://www.qwerksoft.com/products/iisrewrite/download.asp
這裡只有ISAPI Rewrite的一個LITE版本是免費的,其它都是trial版本。ISAPI Rewrite Lite的版本功能。
我們採用isapi_rewrite Lite Version(免費版本)。 引用:
This is simplified edition of ISAPI_Rewrite. It does not support per-virtual-site configurations, proxiing, metabase monitoring and automatic cache cleanup but all other features are supported.
所以,lite版本不支援虛擬網站配置,中繼資料監測和自動緩衝清理。
metabase中繼資料:metabase 中繼資料庫 指一個駐留記憶體的資料存放區地區,其中存放著IIS的配置值。/Metabase是儲存成System32/Inetsrv
資料夾中的Metabase.bin檔案
如何進行UrlRewrite的設定?
isapi_rewrite利用Regex進行替換規則的表示。
下面是一個簡單的例子,我想讓我們的使用者輸入 http://server/test-12314.html 實際上訪問的是 http://server/test.asp?id=12314 。那麼我們的匹配運算式應該是 /test-([0-9]*).html 對應的格式化運算式應該為 /test.asp/?id=$1 。
進行Regex的編寫的時候,可以利用isapi_rewrite提供的Regex測試載入器(預設安裝提供),進行調試。如:
做好了匹配運算式和格式化運算式,我們可以按照下面的格式,把它們放到安裝目錄下的httpd.ini裡面。
格式:RewriteRule 匹配運算式 格式化運算式
剛才的例子:RewriteRule /test-([0-9]*).html /test.asp/?id=$1
檔案儲存後,不需重新啟動iis即可生效。
----------------------------------------------------------------------------------------------------------------------------
廢話少說,來個例子先:
首先引用 rulrewrite_2.6.jar 這個包把.
其次在工程web.xml 中設定filter , 添加如下:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
<init-param>
<param-name>logLevel</param-name>
<param-value>WARN</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
再在web-inf.xml 下添加一個檔案 urlrewite.xml ,內容如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">
<urlrewrite>
<rule>
<note>
- 這是一個通用請求url rewrite - 將請求forword url加上“.do”的處理器上。 - 例: -
請求 http://{domain}/user/login 將被forward到
http://{domain}/user/login.do - 請求
</note>
<!-- > <from>^/([_a-zA-Z]+[_0-9a-zA-Z-/]*[_0-9a-zA-Z]+)/?$</from -->
<from>^/test/([a-z]+)/([a-z]+)$</from>
<to type="forward">/test.do?country=$1&city=$2</to>
</rule>
</urlrewrite>
這樣地址攔中路徑為:
http://localhost:8080/Test/test/China/shanghai , 他訪問的路徑就成為了
http://localhost:8080/Test/test.do?country=china&city=shanghai 了.