在 IIS 7+ 啟用 URL Rewrite 將 *.html 對應至 ASP.NET 處理管線後,原本存在的靜態 .html 檔案回傳 404 或拋出 「未能執行 URL」 (System.Web.HttpException: Failed to execute URL) 錯誤。
當 *.html 全部交由 ASP.NET 處理,靜態檔案不再經由 StaticFileModule 服務。ASP.NET 對於不符合重寫規則的真實 .html 檔案不知該如何處理,導致請求失敗。
<configuration>
<system.webServer>
<handlers>
<!-- 讓靜態 .html 仍由 IIS 原生靜態檔案處理常服務 -->
<add name="StaticHtml" path="*.html" verb="*"
type="System.Web.StaticFileHandler"
resourceType="File" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>
| 屬性 | 值 | 說明 |
|---|---|---|
| name | StaticHtml | 唯一處理常名稱 |
| path | *.html | 比對副檔名 |
| verb | * | 所有 HTTP 動詞 |
| type | System.Web.StaticFileHandler | ASP.NET 內建靜態檔案處理常 |
| resourceType | File | 僅比對實體檔案 |
| requireAccess | Read | 需讀取權限 |
web.config,IIS 自動重載設定。/test.html,應正常回傳內容。.html 路由仍由 ASP.NET 處理。<system.web>
<httpHandlers>
<add verb="*" path="*.html" type="System.Web.StaticFileHandler" />
</httpHandlers>
</system.web>
整合模式請用 system.webServer/handlers。