IIS 7 引入全新管線架構:**整合模式** 讓 ASP.NET 模組原生融入 IIS 處理管線,**URL Rewrite Module 2.0** 提供宣告式重寫規則,取代舊式 `IHttpHandlerFactory`/`HttpModule` 代碼。本文詳細說明 IIS 7+ 環境下 ASP.NET URL 重寫的完整配置步驟。
| 模式 | 特點 | 適用場景 |
|---|---|---|
| 整合模式 | ASP.NET 模組參與完整 IIS 管線、效能最好、支援 URL Rewrite Module、靜態檔案也可經 ASP.NET 授權 | **新專案預設、強烈建議** |
| 經典模式 | ASP.NET 管線獨立、相容舊版 HttpModule/Handler、需在 ` | 舊專案無法立即遷移、依賴經典管線行為 |
設定位置:IIS 管理員 → 應用程式集區 → 進階設定 → 受管理管線模式
整合模式下,在 `
關鍵:請求限制 → 取消勾選「叫用處理常式時驗證檔案是否存在」,否則重寫至虛擬路徑會回傳 404。
| 現象 | 原因 | 解決 |
|---|---|---|
| 重寫後回傳 404 | 處理常式「驗證檔案存在」攔截 | Handler Mappings → 編輯 → 請求限制 → 取消勾選 |
| 規則不生效 | stopProcessing="true" 導致後續規則被跳過 / 正則錯誤 | 檢查規則順序、使用「測試模式」驗證 |
| CSS/JS/圖片 404 | 相對路徑在重寫後層級改變 | 頁面使用根相對路徑 `/css/...` 或 ` |
| Postback 後網址變成內部路徑 | ` | `Page.Form.Action = Request.RawUrl;` 或 `form action="."` |
| 無限重寫循環 | 規則互相觸發 | 加入條件排除已重寫路徑、使用 `stopProcessing` |
IIS 7+ 整合模式 + URL Rewrite Module 是 ASP.NET URL 重寫的**現代標準解法**,棄用代碼式重寫,擁抱宣告式配置。