摘要:介紹如何使用 Microsoft ASP.NET 執行動態 URL 重寫。URL 重寫是截取傳入 Web 請求並自動將請求重定向到其他 URL 的過程。討論實現 URL 重寫的各種技術,並介紹執行 URL 重寫的一些實際情況。
引言
讓我們花點時間來看一下網站上的一些 URL。您是否發現一些類似於 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 的 URL?或者,您可能將一系列網頁從一個目錄或網站移動到另一個目錄或網站,結果導致已將舊 URL 用作書簽的訪問者斷開鏈接。在本文中,我們將了解如何通過將 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 替換為類似於 http://yoursite.com/people/sales/chuck.smith 的網址,使用 URL 重寫將那些冗長的 URL 縮寫為富有意義且容易記憶的 URL。我們還將了解如何將 URL 重寫用於創建智能 404 錯誤。
URL 重寫是截取傳入 Web 請求並自動將請求重定向到其他資源的過程。執行 URL 重寫時,通常會檢查被請求的 URL,並基於 URL 的值將請求重定向到其他 URL。例如,在進行網站重組而將 /people/ 目錄下的所有網頁移動到 /info/employees/ 目錄中時,您可能希望使用 URL 重寫來檢查 Web 請求是否指向了 /people/ 目錄中的文件。如果請求指向 /people/ 目錄中的文件,您可能希望自動將請求重定向到 /info/employees/ 目錄中的同一文件。
使用傳統的 ASP,應用 URL 重寫的唯一方法是編寫 ISAPI 篩選器,或者購買提供 URL 重寫功能的第三方產品。但是,使用 Microsoft® ASP.NET,您可以通過很多方法來輕松地創建您自己的 URL 重寫軟件。本文討論了可供 ASP.NET 開發人員實現 URL 重寫的各種技術,然後討論了 URL 重寫的一些實際使用情況。在深入討論 URL 重寫的技術細節之前,讓我們先看一些可以使用 URL 重寫的日常情景。
URL 重寫的常見用法
創建數據驅動的 ASP.NET 網站時,通常會產生一個單個的網頁,該網頁基於查詢字符串參數顯示數據庫數據的子集。例如,在設計電子商務站點時,您的任務之一便是允許用戶浏覽待售產品。為此,您可以創建一個名為 displayCategory.aspx 的頁面,該頁面將顯示給定類別的產品。可以通過查詢字符串參數來指定要查看的該類別的產品。也就是說,如果用戶要浏覽待售的 Widget 產品,並且所有 Widget 產品的 CategoryID 均為 5,則用戶可以訪問以下網址:http://yousite.com/displayCategory.aspx?CategoryID=5。
創建具有此類 URL 的網站有兩點不足:首先,從最終用戶的角度考慮,URL http://yousite.com/displayCategory.aspx?CategoryID=5 比較雜亂。可用性專家 Jakob Neilsen建議遵循以下標准來選擇 URL:
•簡短。
•易於鍵入。
•可以看出站點的結構。
•“可刪節”,允許用戶通過刪除 URL 的組成部分來浏覽站點。
我還要增加一條標准,即,URL 應該便於記憶。URL http://yousite.com/displayCategory.aspx?CategoryID=5 不符合 Neilsen 的任何標准,也不容易記住。要求用戶鍵入查詢字符串值將使 URL 的鍵入變得非常困難,並且只有了解查詢字符串參數的用途及其名稱/值對結構的富有經驗的 Web 開發人員才能夠對 URL 進行“刪節”。
較好的方法是允許使用切合實際且容易記憶的 URL,如 http://yoursite.com/products/Widgets。只要看一眼 URL,您便可以推斷出將要顯示的內容 -- 有關 Widget 的信息。此 URL 也很容易記住和共享。我可以告訴我的同事“請查看 yoursite.com/products/Widgets,”,她可能無需再次問我 URL 是什麼即可打開該頁面。(嘗試一下,您只需說出“Amazon.com 頁面”即可!)此 URL 還將顯示出來,並且應該是“可刪節”的。也就是說,如果用戶刪去 URL 的末端,鍵入 http://yoursite.com/products,他們應該看到所有產品的列表,或者至少應該看到他們可以查看的所有類別的產品列表。
注意:要獲得“可刪節”URL 的最好示例,可考慮使用由許多 blog 引擎生成的 URL。要查看 2004 年 1 月 28 日的帖子,用戶可以訪問諸如 http://someblog.com/2004/01/28 的 URL。如果該 URL 被刪節為 http://someblog.com/2004/01,用戶將看到 2004 年 1 月的所有帖子。將該 URL 進一步刪節為 http://someblog.com/2004 將顯示 2004 年的所有帖子。
除了簡化 URL 之外,URL 重寫還經常用於處理網站重組,以免導致大量鏈接斷開或書簽過期。
請求到達 IIS 時將會發生什麼情況
在正式研究 URL 如何實現重寫之前,應首先了解 Microsoft® Internet Information Services (IIS) 如何處理傳入請求,這一點非常重要。當請求到達 IIS Web 服務器時,IIS 檢查被請求文件的擴展名以確定如何處理該請求。IIS 可以自行處理請求(如 HTML 頁面、圖像以及其他靜態內容),或者將請求路由到 ISAPI 擴展。(ISAPI 擴展是一個處理傳入 Web 請求的非托管編譯類。其任務是生成被請求資源的內容。)