首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

IIS 7 URL Rewrite 導致靜態 HTML 無法存取解決方案

     編輯:更多程式設計知識

問題現象

在 IIS 7+ 啟用 URL Rewrite 將 *.html 對應至 ASP.NET 處理管線後,原本存在的靜態 .html 檔案回傳 404 或拋出 「未能執行 URL」 (System.Web.HttpException: Failed to execute URL) 錯誤。

根本原因

當 *.html 全部交由 ASP.NET 處理,靜態檔案不再經由 StaticFileModule 服務。ASP.NET 對於不符合重寫規則的真實 .html 檔案不知該如何處理,導致請求失敗。

解決方案:在 web.config 註冊 StaticFileHandler

<configuration>
  <system.webServer>
    <handlers>
      <!-- 讓靜態 .html 仍由 IIS 原生靜態檔案處理常服務 -->
      <add name="StaticHtml" path="*.html" verb="*"
           type="System.Web.StaticFileHandler"
           resourceType="File" requireAccess="Read" />
    </handlers>
  </system.webServer>
</configuration>

關鍵屬性說明

屬性值說明
nameStaticHtml唯一處理常名稱
path*.html比對副檔名
verb*所有 HTTP 動詞
typeSystem.Web.StaticFileHandlerASP.NET 內建靜態檔案處理常
resourceTypeFile僅比對實體檔案
requireAccessRead需讀取權限

驗證步驟

  1. 儲存 web.config,IIS 自動重載設定。
  2. 瀏覽器直接請求存在的 /test.html,應正常回傳內容。
  3. 重寫規則對應的虛擬 .html 路由仍由 ASP.NET 處理。

補充:若使用傳統模式 (Classic Pipeline)

<system.web>
  <httpHandlers>
    <add verb="*" path="*.html" type="System.Web.StaticFileHandler" />
  </httpHandlers>
</system.web>

整合模式請用 system.webServer/handlers。

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