首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET URL Rewriter 使用經驗總結:規則撰寫、靜態副檔名映射與常見坑點

     編輯:關於ASP.NET

元件簡介

URL Rewriter (官方/社群版) 透過 `HttpModule` 攔截請求,依正則規則重寫路徑,實現 SEO 友善、隱藏技術細節的 URL。核心設定於 `Web.config`。

Web.config 完整設定


 
 
~/Product/([0-9]+)\.html ~/Product.aspx?id=$1 ~/Category/([a-zA-Z0-9_-]+)\.html ~/Category.aspx?name=$1 ~/.*\.aspx ~/$0

正則規則撰寫要訣

語法說明範例
`~`應用程式根目錄`~/Product/...`
`$1` `$2`捕獲群組反向引用`SendTo="~/Page.aspx?id=$1"`
一個以上數字ID、頁碼
`[a-zA-Z0-9_-]+`英數字、底線、連字號 (Slug)分類名、文章別名
`\.`字面點號 (需跳脫)`\.html`、`\.aspx`
`.*`任意字元 (貪婪),慎用捕獲剩餘路徑

關鍵坑點:靜態副檔名 (.html/.jpg/.css) 不觸發 ASP.NET

IIS 預設僅將 `.aspx`、`.ashx` 等對應至 `aspnet_isapi.dll`。若重寫目標為 `.html`,請求永遠不進入 ASP.NET 管線,重寫失效。

解決方案

  1. IIS 6 (經典模式):IIS 管理員 → 網站屬性 → 主目錄 → 設定 → 對應 → 新增 `.html` 指向 `aspnet_isapi.dll` (取消「確認檔案存在」)。
  2. IIS 7+ (整合模式):`web.config` `` 加入:

或更佳:使用 **URL Rewrite Module 2.0** (IIS 原生模組),設定於 `web.config` ``,不需 ASP.NET 管線參與,效能更好、支援輸出重寫、反向 Proxy。

進階技巧

  • 條件重寫:`` 支援 `` 子元素 (如僅行動裝置、特定 User-Agent)。
  • 輸出重寫:`Response.Filter` 替換頁面輸出中的連結 (舊版支援有限,建議用 IIS URL Rewrite `outboundRules`)。
  • 效能:規則順序最常命中者優先;避免過度複雜正則;編譯為 `RegexOptions.Compiled` (元件內部處理)。
  • 除錯:啟用元件內建 Trace (``),輸出重寫前後路徑至 Trace.axd。

現代替代:ASP.NET Core / IIS URL Rewrite Module

  • ASP.NET Core:`app.UseRewriter()`、`MapGet("/product/{id}.html", ...)` 端點路由原生支援。
  • IIS URL Rewrite Module 2.0:`...`,XML 設定、支援正則、條件、輸出重寫、反向 Proxy、快取、效能極佳。

總結

URL Rewriter 以 `HttpModule` + 正則規則實現 URL 重寫,核心在於 `Web.config` 設定正確、靜態副檔名映射至 ASP.NET、規則順序優化。新專案優先採用 IIS 原生 URL Rewrite Module 或 ASP.NET Core 端點路由。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved