Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

IIS 7/7.5 偽靜態「+」號與空格導致 404 錯誤完整解決方案

編輯:關於伺服器

在 Windows Server 2008 + IIS 7 + PHP 環境中,URL 重寫規則匹配包含加號 + 或空格的路徑時,常出現 404 錯誤。根因在於 IIS 請求過濾模組預設雙重編碼檢查機制,將 + 視為空格編碼 (%20) 並拒絕請求。本文提供兩種修正方案,並分析適用場景。

問題根因

IIS requestFiltering 模組預設 allowDoubleEscaping="false"。當 URL 經過一次編碼 (如 + → %2B) 再次進入 IIS 管線時,被視為「雙重編碼」而觸發 404.11 錯誤。此行為雖提升安全性,卻干擾合法帶特殊字元的 RESTful URL 或搜尋查詢。

方案一:站點層級修改 web.config(推薦)

僅影響單一網站,風險可控,部署簡單。

<configuration>
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true" />
    </security>
  </system.webServer>
</configuration>

操作步驟:

  1. 定位網站根目錄下的 web.config (不存在則新建)。
  2. 在 <system.webServer> 區段內加入 <security><requestFiltering allowDoubleEscaping="true" /></security>。
  3. 儲存後 IIS 自動重讀配置即時生效。

方案二:伺服器層級修改 applicationHost.config

影響該 IIS 實例下所有網站,適合多站點統一需求,但需謹慎操作。

<configuration>
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true" />
    </security>
  </system.webServer>
</configuration>

操作步驟:

  1. 以管理員身分開啟 %windir%\System32\inetsrv\config\applicationHost.config。
  2. 搜尋 <requestFiltering> 節點 (約第 360 行)。
  3. 修改為 <requestFiltering allowDoubleEscaping="true">。
  4. 儲存並執行 iisreset 重啟服務。

安全性權衡與建議

維度方案一 (web.config)方案二 (applicationHost.config)
影響範圍單一站點全伺服器所有站點
部署權限網站管理員可操作需伺服器管理員權限
風險隔離高,問題不波及其他站點低,全域放寬可能引入其他站點風險
維護性隨網站代碼版控,遷移無憂需額外記錄伺服器配置變更

最佳實踐:優先採用方案一。僅當確定所有站點均需支援雙重編碼 URL,且經過風險評估後,才考慮方案二。修改後務必測試包含 +、%20、%2B 等編碼組合的 URL,確認重寫規則正確匹配。

Copyright © Windows教程網 All Rights Reserved