在聊這個技術問題前,我不由得想起一個可笑的故事。NetCraft曾經做了一個測評,這個測評根據比較大量網站頁面的副檔名是ASP.NET的還是JSP/Servlet的,得到了一個結論,現在ASP.NET的應用超過了JSP/Servlet。
這個測評引發了大量的討論,很多用JSP的技術人員嘲笑這個測評。因為這個測評的結論忽略了一個很大的問題。那就是,JSP開發的網站的頁面,一定是.jsp嗎?
答案當然是否定的。特別是mvc結構的網站常常都是沒有.jsp副檔名的,這是一個慣例了。如果不是為了避免混淆,我們甚至可以讓JSP的引擎來解析副檔名為aspx的jsp程式,或者讓ASP.NET的引擎來解析副檔名為jsp的ASP.NET程式。唯一需要做的就是在伺服器的管理工具上面做一些選擇,或者修改設定檔等等。
另外,我們還可以用更強大的技術UrlRewrite,來把動態網頁面的地址變成象一個靜態頁面一樣,或者把動態網頁面的參數,變成靜態頁面地址中的路徑名或者檔案等等。所以,有時候,請不要太相信你的眼睛,只要伺服器管理員想做,那麼也許某個.htm地址其實是一個ASP.NET程式,某個.doc其實是一個JSP程式。眼見並不一定為實。
靜態頁面對於搜尋引擎的友好性是毋庸置疑的,但是,動態網頁面的優勢對於網站維護的便利,論壇和其他需要程式控制的機制來說也是必需的。
我們除了可以用使用內容發布系統把頁面發布為靜態html格式以外,還有另外的選擇。那就是靜態--〉動態網頁面的映射。這裡,Apache伺服器上有一個非預設模組mod_Rewrite。使用了Regex方式,把動態網頁面轉換為靜態頁面。這樣我們就可以把me.asp?para=123映射成me/123.html這樣的靜態頁面。當遇到me/123.html的請求時,web server自動導向me.asp?para=123來處理。
UrlRewrite是怎麼樣發生作用的?
簡單的說,一個web server的工作就是根據使用者請求的地址發送一個檔案,或者運行一個cgi/指令碼,並把運行結果發送給使用者。加入了UrlRewrite功能的web server的工作流程略有變化,首先是看使用者請求的地址是否包括在我們的替換規則裡面。如果在,先把使用者請求的地址進行改變,然後伺服器按照新的地址進行檔案傳送或者cgi/指令碼執行。參看:
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 。
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即可生效。
參考資料:
面向Google(Search Engine Friendly)的URL設計
http://www.chedong.com/tech/google_url.html
ISAPI REWRITE文檔
http://www.isapirewrite.com/docs/