IIS 7+ 模組化管線引入詳細子狀態碼,快速定位問題:
訊息:「要求篩選模組被設定為拒絕包含雙重逸出序列的要求。」
原因:URL 含 %25 (雙重編碼 %)、%2F (斜線)、%5C (反斜線) 等。
解決:applicationHost.config → <requestFiltering allowDoubleEscaping="true" /> (僅信任內部應用)。
更佳:應用程式層面正規化 URL,避免雙重編碼。
訊息:「要求篩選模組被設定為拒絕超過要求內容長度的要求。」
預設限制:maxAllowedContentLength="30000000" (約 30 MB)。
解決:applicationHost.config 或 web.config:
<requestFiltering><requestLimits maxAllowedContentLength="104857600" /></requestFiltering> (100 MB)。
注意:ASP.NET 另需 <httpRuntime maxRequestLength="102400" /> (單位 KB) 同步調整。
訊息:「無法讀取組態資料...」
常見 HRESULT:
• 0x8007000d:XML 格式錯誤 (標籤未閉合、特殊字元未逸出)。
• 0x80070005:權限不足 (IIS_IUSRS 讀取 web.config 失敗)。
• 0x80070021:鎖定區段 (父層 <section overrideModeDefault="Deny" />)。
解決:
1. 用 appcmd list config "Default Web Site" /section:system.webServer/security/authentication /commit:apphost 檢查鎖定。
2. <location path="." overrideMode="Allow"> 解鎖。
3. 修正 XML、授權 icacls "C:\inetpub\wwwroot\web.config" /grant "IIS_IUSRS:(R)"。
原因:應用程式集區已停止 (快速失敗保護觸發、啟動型別為 Disabled、身分識別密碼過期/錯誤、WAS 服務未啟動)。
排查:
1. IIS 管理員 → 應用程式集區 → 狀態「已停止」→ 啟動。
2. 事件檢視器 → System/Application → 事件 ID 5002/5011/5013/5036/5186/5189。
3. system32\inetsrv\config\applicationHost.config → <add name="MyPool" autoStart="true" />。
4. 身分識別:ApplicationPoolIdentity (推薦) 或 設定正確密碼的自訂帳號。
5. net start WAS / net start W3SVC 確認服務啟動。
| 子狀態碼 | 意義 | 關鍵設定 |
|---|---|---|
| 404.0 | 找不到檔案/目錄 | 靜態內容對應、虛擬目錄 |
| 404.3 | MIME 對應缺失 | <staticContent><mimeMap fileExtension=".woff2" mimeType="font/woff2" /></staticContent> |
| 404.7 | 要求篩選封鎖副檔名 | <requestFiltering><fileExtensions><add fileExtension=".config" allowed="false" /></fileExtensions></requestFiltering> |
| 404.8 | 隱藏區段 (web.config) | <requestFiltering><hiddenSegments><add segment="web.config" /></hiddenSegments></requestFiltering> |
| 404.11 | 雙重逸出 | allowDoubleEscaping="true" |
| 404.12 | 高位元組序列 | allowHighBitCharacters="true" |
| 404.13 | 內容長度過大 | maxAllowedContentLength |
| 404.14 | URL 過長 | maxUrl, maxQueryString |
| 500.19 | 組態讀取失敗 | XML/權限/鎖定 |
| 500.21 | 模組辨識失敗 | ASP.NET 註冊 aspnet_regiis -i / dism /online /enable-feature /featurename:IIS-ASPNET45 |
| 503 | 服務不可用 | AppPool 狀態、WAS、身分識別 |
記住:子狀態碼才是真相,瀏覽器只顯示 404/500,詳細錯誤需開啟 <httpErrors errorMode="DetailedLocalOnly" /> 或查看 %SystemDrive%\inetpub\logs\LogFiles\W3SVC1。