使用 URL 重寫模組
關於 URL 重寫模組
適用於 IIS 7 和更新版本Microsoft URL 重寫模組 2.0 可讓 IIS 系統管理員建立功能強大的自定義規則,將要求 URL 對應至易記 URL,讓使用者更容易記住,並更容易找到搜尋引擎。 您可以使用網址重寫模組來執行網址操作工作,其中一些包括:
- 定義功能強大的規則,將複雜的URL轉換成簡單且一致的網址。
- 輕鬆取代 Web 應用程式 URL 以產生使用者和搜尋引擎易記的結果。
- 根據 HTTP 標頭和 IIS 伺服器變數重寫 URL。
- 根據重寫規則中所表示的邏輯,執行重新導向、傳送自定義回應或停止 HTTP 要求。
- 根據 URL 區段或要求元數據來控制網站內容的存取。
URL Rewrite 模組同時可供下載,您可以在自己的 IIS 伺服器上,以及Microsoft的 Azure 網站 雲端平台上安裝。
URL 重寫 2.0 功能
Microsoft URL Rewrite 模組 2.0 包含下列主要功能:
- 以規則為基礎的 URL 重寫引擎。 重寫規則會定義用來分析要求 URL 的邏輯,並在要求 URL 符合定義的規則時,將其對應至重新建立 URL。 網頁伺服器和網站管理員可以使用重寫規則集來定義URL重寫邏輯。
- 正則表達式模式比對。 重寫規則可以使用正則表達式語法進行模式比對,如 ECMA-262 中所定義。
- 通配符模式比對。 重寫規則可以使用通配符語法進行模式比對。
- 全域和分散式重寫規則。 URL 重寫會使用全域規則來定義全伺服器 URL 重寫邏輯。 這些規則是在 applicationHost.config 檔案中定義,而且會取代在組態階層中較低層級設定的規則。 模組也會使用分散式規則來定義特定組態範圍專屬的URL重寫邏輯。 這種類型的規則可以使用 Web.config 檔案在任何組態層級上定義。
- 存取伺服器變數和 HTTP 標頭。 伺服器變數和 HTTP 標頭會提供有關目前 HTTP 要求的其他資訊。 此資訊可用來設定重寫規則或撰寫輸出 URL。
- 各種規則動作。 規則可能會執行其他動作,例如發出 HTTP 重新導向、中止要求,或將自定義狀態代碼傳送至 HTTP 用戶端,而不是重寫 URL。
- 支援 IIS 核心模式和使用者模式輸出快取。 IIS 輸出快取可為 Web 應用程式提供顯著的效能改善。 URL Rewrite 模組與這兩種類型的輸出快取完全相容。 這表示可以安全地快取重寫 URL 的回應,進而提升依賴 URL 重寫之 Web 應用程式的效能。
- 字串操作函式。 內建字串操作函式可用來將URL轉換成小寫,以及執行URL編碼和譯碼。
- 重寫地圖。 重寫對應是名稱/值組的任意集合。 您可以在重寫規則內使用重寫對應來產生替代 URL。 當您有一組大量的重寫規則時,重寫對應特別有用,這些規則全都使用靜態字串(也就是沒有使用的模式比對)。 在這些情況下,您可以使用輸入 URL 做為索引鍵,以及替代 URL 作為值,將重寫對應中的所有對應放入重寫對應中,而不是定義一組大型的簡單重寫規則。 接著,您可以有一個重寫規則參考重寫對應,以根據輸入 URL 查閱替代 URL。
- 要求追蹤支持失敗。 IIS 失敗的要求追蹤可用來針對 URL 重寫相關的錯誤進行疑難解答。
- 規則範本。 規則範本是 URL Rewrite 模組使用者介面的延伸模組,可簡化特定工作的重寫規則的建立。 此模組包含 3 個規則範本,也支援插入任意數目的自定義範本。
- 用於測試正則表達式和通配符模式的用戶介面(UI)。 模組會提供測試規則模式的UI。 使用UI,您可以在重寫規則中快速檢查正規表示式或通配符模式的結果。 您也可以使用 UI 來針對模式比對的相關問題進行疑難解答和偵錯。
- 用於管理重寫規則和重寫地圖的UI。 您可以使用 IIS 管理員中的 URL Rewrite Module,來新增、移除和編輯重寫規則和重寫對應。
- 匯入mod_rewrite規則的UI。 URL Rewrite 模組包含 UI,可將重寫規則從 mod_rewrite 格式轉換成 IIS 格式。
取得 URL 重寫模組的位置
如需詳細資訊並下載模組,請參閱 URL Rewrite 擴充功能首頁。
從 Go Live 版本升級
如果您已安裝 URL 重寫模組的 Go Live 版本,安裝套件會將它升級為 URL Rewrite 2.0 版。 將會保留 ApplicationHost.config 和 Web.config 檔案中的所有重寫規則。
ASP.NET 更新
URL Rewrite 模組安裝程式套件包含 ASP.NET 更新,可修正 URL 重寫模組專屬的 ASP.NET 錯誤。 具體來說,更新包含下列 Bug 的修正:
- ~ 使用 URL 重寫時,ASP.NET Web 伺服器控件中的運算子解析不正確。
- 當 sitemap 包含虛擬 URL 時,ASP.NET SiteMap.CurrentNode 屬性會傳回 null。
只有在安裝 URL 重寫模組的電腦有 .NET Framework 3.5 版 SP1 或更高版本時,才會套用更新。 如果您在安裝 URL Rewrite 模組之後安裝必要的 .NET Framework 版本,您可以執行 URL Rewrite 模組安裝程式,然後選取 安裝程式對話框中的 [修復 ] 選項,套用 ASP.NET 更新。
如需這些和其他與 URL 重寫相關的其他 ASP.NET 問題的詳細資訊,請參閱 url Rewriting for ASP.NET Web Form。
使用模組
這些文章涵蓋 URL 重寫模組的功能,並說明如何使用它來實作常見的 URL 重寫案例。
學習基本概念
參考和指引
影片逐步解說
Go Live 發行后的變更
自 Go Live 發行以來,已對 URL 重寫模組進行下列新增、變更和重要 Bug 修正:
- 已新增字串操作函式 UrlEncode 和 UrlDecode。
- 透過伺服器變數UNENCODED_URL提供原始原始 URL 的存取權。 此伺服器變數現在包含原始編碼的 URL,與網頁瀏覽器所要求的 URL 完全相同。
- 已新增UI,用於設定應用程式要求路由 (ARR) 的重寫規則。
- 已從 URL 重寫模組的 Go Live 版本新增就地升級的支援。
- 已新增功能來清除內部快取,以避免在快取重寫規則時過度使用記憶體。
- 修正了重寫包含非 ASCII 字元之 URL 的相關 Bug。
- 已修正處理正則表達式的 Bug,導致不區分大小寫模式評估字元範圍。
- 在安裝程式套件中包含 IIS FastCGI 模組 的更新。
- 包含 安裝程式套件中System.Web.dll 的更新。
- 在安裝程式套件中包含 IIS SetUri 函式的更新。
已知問題
- 使用 URL 重寫匯入規則功能時,mod_rewrite使用 REQUEST_URI 伺服器變數的規則可能無法正確運作。 若要修正匯入的規則,您可以使用任何文本編輯器來開啟包含這些規則的 Web.config 檔案。 找出 區
<rewrite>
段,然後在該區段中,將字串 “{SCRIPT_NAME}” 的所有實例取代為字串 “{URL}”。 - 摘要式驗證無法與 URL 重寫模組搭配使用。
- ASP.NET 窗體驗證會使用重寫 URL 進行重新導向。 例如,如果要求的 URL 是 “/article.htm”,而 URL Rewrite 模組會將 URL 重寫為 “/article.aspx”,則窗體驗證會保護該 URL,則 ASP.NET 會重新導向至 “/login.aspx?ReturnUrl=%2Farticle.aspx」。
- ASP.NET 窗體驗證中的自動偵測模式會使用重寫的 URL 進行重新導向。 例如,如果要求的 URL 是 “/article.htm”,而 URL Rewrite 模組會將 URL 重寫為 “/article.aspx”,則窗體驗證會保護該 URL,則 ASP.NET 會重新導向至 “/article.aspx?AspxAutoDetectCookieSupport=1“。。
- ASP.NET Forms 驗證中的 UseUri 模式會使用重寫的 URL 進行重新導向。 例如,如果要求的 URL 是 “/article.htm”,而 URL Rewrite 模組會將 URL 重寫為 “/article.aspx”,而窗體驗證會保護該 URL,則 ASP.NET 會重新導向至 “/(S(vy2ebt45imfkmjjwboow3l55))/article.aspx”。
- ASP.NET 使用 URI 型驗證或無 Cookie 會話狀態時,重寫回原始 URL。 例如,當對 “/(S(vy2ebt45imfkmjjwboow3l55)提出要求時/article.htm”,而 URL 重寫模組會將 “/article.htm” 重寫為 “/article.aspx”,則 ASP.NET 會將 URL 重寫回 “/article.htm”,這可能會導致 “404 - 檔案找不到” 錯誤。
- 當 URL Rewrite 模組重寫至資料夾時,IIS DefaultDocument 模組可能會重新導向至重寫的 URL。 例如,如果重寫規則中的替代 URL 是 “/folder1/folder2”,而且這些資料夾存在於文件系統上並已設定 Default 檔,則 DefaultDocument 模組會將 Web 用戶端重新導向至 “/folder1/folder2/”,從而公開重寫的 URL。 若要避免這種情況發生,請在重寫至資料夾時,於替代 URL 結尾使用 “/”,例如 “/folder1/folder2/”