共用方式為


使用 URL 重寫模組

Ruslan Yakushev

關於 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 的修正:

  1. ~ 使用 URL 重寫時,ASP.NET Web 伺服器控件中的運算子解析不正確。
  2. 當 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 修正:

  1. 已新增字串操作函式 UrlEncodeUrlDecode
  2. 透過伺服器變數UNENCODED_URL提供原始原始 URL 的存取權。 此伺服器變數現在包含原始編碼的 URL,與網頁瀏覽器所要求的 URL 完全相同。
  3. 已新增UI,用於設定應用程式要求路由 (ARR) 的重寫規則。
  4. 已從 URL 重寫模組的 Go Live 版本新增就地升級的支援。
  5. 已新增功能來清除內部快取,以避免在快取重寫規則時過度使用記憶體。
  6. 修正了重寫包含非 ASCII 字元之 URL 的相關 Bug。
  7. 已修正處理正則表達式的 Bug,導致不區分大小寫模式評估字元範圍。
  8. 在安裝程式套件中包含 IIS FastCGI 模組 的更新。
  9. 包含 安裝程式套件中System.Web.dll 的更新。
  10. 在安裝程式套件中包含 IIS SetUri 函式的更新。

已知問題

  1. 使用 URL 重寫匯入規則功能時,mod_rewrite使用 REQUEST_URI 伺服器變數的規則可能無法正確運作。 若要修正匯入的規則,您可以使用任何文本編輯器來開啟包含這些規則的 Web.config 檔案。 找出 區 <rewrite> 段,然後在該區段中,將字串 “{SCRIPT_NAME}” 的所有實例取代為字串 “{URL}”。
  2. 摘要式驗證無法與 URL 重寫模組搭配使用。
  3. ASP.NET 窗體驗證會使用重寫 URL 進行重新導向。 例如,如果要求的 URL 是 “/article.htm”,而 URL Rewrite 模組會將 URL 重寫為 “/article.aspx”,則窗體驗證會保護該 URL,則 ASP.NET 會重新導向至 “/login.aspx?ReturnUrl=%2Farticle.aspx」。
  4. ASP.NET 窗體驗證中的自動偵測模式會使用重寫的 URL 進行重新導向。 例如,如果要求的 URL 是 “/article.htm”,而 URL Rewrite 模組會將 URL 重寫為 “/article.aspx”,則窗體驗證會保護該 URL,則 ASP.NET 會重新導向至 “/article.aspx?AspxAutoDetectCookieSupport=1“。。
  5. ASP.NET Forms 驗證中的 UseUri 模式會使用重寫的 URL 進行重新導向。 例如,如果要求的 URL 是 “/article.htm”,而 URL Rewrite 模組會將 URL 重寫為 “/article.aspx”,而窗體驗證會保護該 URL,則 ASP.NET 會重新導向至 “/(S(vy2ebt45imfkmjjwboow3l55))/article.aspx”。
  6. ASP.NET 使用 URI 型驗證或無 Cookie 會話狀態時,重寫回原始 URL。 例如,當對 “/(S(vy2ebt45imfkmjjwboow3l55)提出要求時/article.htm”,而 URL 重寫模組會將 “/article.htm” 重寫為 “/article.aspx”,則 ASP.NET 會將 URL 重寫回 “/article.htm”,這可能會導致 “404 - 檔案找不到” 錯誤。
  7. 當 URL Rewrite 模組重寫至資料夾時,IIS DefaultDocument 模組可能會重新導向至重寫的 URL。 例如,如果重寫規則中的替代 URL 是 “/folder1/folder2”,而且這些資料夾存在於文件系統上並已設定 Default 檔,則 DefaultDocument 模組會將 Web 用戶端重新導向至 “/folder1/folder2/”,從而公開重寫的 URL。 若要避免這種情況發生,請在重寫至資料夾時,於替代 URL 結尾使用 “/”,例如 “/folder1/folder2/