URL Rewriting,這個好像似曾相識,又覺得很陌生的技術,已經隨著資訊安全與SEO (Search Engine Optimization)的腳步,逐漸影響每個Web Developer,不論你是走哪個技術的,基本上都很難不去重視它,因為它其實可以幫你很多忙。光是一個REST的URL樣式,就可以讓很多人眼睛為之一亮。
試想,如果你的網站有某支URL是長這樣好看:
http://www.cuoxin.com/myblog/blog.aspx?id=18472938290&postdate=20090404
還是這樣好看:
http://www.lifeis-2-short.com/myblog/2009/04/04/18472938290.aspx
又或者,使用者是否可以用這樣的輸入URL方式:
http://www.lifeis-2-short.com/productinfo/MP3
去列出他想要搜尋的MP3 Player的型錄,還是要使用者去打:
http://www.lifeis-2-short.com/productinfo/search.aspx?keyword=MP3這樣的URL?
我想對行銷或消費者行為有概念的人來看的話,答案就很明顯了。
URL Rewriting的強項,就是將外表的URL,轉換成內部自己看的到的URL再做處理,可以讓內部的URL繼續使用,又可以讓外部的URL具親和性,因此URL Rewriting現在已經逐漸成為網站開發人員必須要知道的技術之一,而且現在其實已經有很多URL Rewriting的模組可以使用了,例如UrlRewriting.Net這個套件,或是IIS 7.0中的URL Rewriting Module等。
不過,如果能夠自己走一遭的話,會更了解URL Rewriting是什么,而且對于網路上的URL Rewriting模組,也會更具精確的掌握力(以下以ASP.NET為主要說明的技術,其他的語言請參照手冊,找出相對應的功能)。
首先,URL Rewriting是作為外部與內部URL要求的轉換器,它需要過濾所有的URL,來執行重轉向的動作,因此它比較適合生存在Web Server的執行過程中,以ASP.NET來說,使用HTTP Module即可處理這方面的工作(HTTP Handler較不適合)。
接者,設定處理HttpApplication.BeginRequest或是HttpApplication.AuthorizeRequest事件(多數的模組都是處理HttpApplication.AuthorizeRequest事件):
然后再于事件常式中,呼叫HttpApplication.Context.RewritePath()即可:
然后,在Web.config中,將這個模組掛到system.web/httpModules設定中,若是IIS 7.0,則要設在system.webServer/modules中。
然后執行這個Web Application,不論你輸入哪個URL路徑,都會被導向到MyHandler.aspx中(當然,你的專案中要有MyHandler.aspx這個網頁)。
URL Rewriting其實技術上就是這樣而已,透過HttpApplication.Context.RewritePath()將要求的URL傳到指定的網頁來處理,然而在開發實務上,URL Rewriting要考量的其實很多:
由于每個URL都會被處理,那如果URL指向的是圖片,檔案,scripts或其他資源時要如何處理? 是否有特殊要排除的路徑? 執行URL Rewriting時,URL的格式要怎么設計才會符合需求? 由于URL被重寫時,<form>的action屬性會反應內部的URL,而不是外部的URL,此時要如何處理?
URL Rewriting對效能很要求,因為它要處理每一個URL要求,而不是選擇性不處理。
另外,URL也不是一定要硬性的做Rewriting,部份需要排除的就不需要做Rewriting,或者你有某種格式的URL是要做重導向(HTTP 302)的話,也可以直接輸出HTTP 302訊息要求瀏覽器重導向即可,切記,不要在URL Rewriting中加太多的判斷條件,也不要在URL Rewriting中做太耗時間的事,那只會拖慢URL的處理速度(例如還要連資料庫存取資料這種事)。
新聞熱點
疑難解答