Iis-7
IIS 7 在自定義 404 錯誤頁面上返回 HTTP 200
我已經成功地為 IIS7 設置了自定義靜態錯誤頁面。IIS7 目前用作 Java tomcat 應用程序的網關。問題是,當提供 404 錯誤頁面時,它會提供 HTTP 200 狀態程式碼標頭。我想要一種配置 IIS 以繼續發送 HTTP 404 的方法。錯誤頁面作為靜態頁面存在於 webroot 中。
這是我的 web.config 的主要部分:
<system.webServer> <rewrite> <rules> <rule name="HTTP to HTTPS Redirect" enabled="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" /> </rule> <rule name="Reverse Proxy" stopProcessing="true"> <match url="(.*)" /> <action type="Rewrite" url="http://localhost:8080/{R:1}" /> <conditions> <add input="{R:1}" pattern="error/*." negate="true" /> </conditions> </rule> </rules> </rewrite> <httpErrors errorMode="Custom" existingResponse="Auto"> <remove statusCode="404" subStatusCode="-1" /> <error statusCode="404" prefixLanguageFilePath="" path="/error/404.htm" responseMode="ExecuteURL" /> </httpErrors> </system.webServer>
切換到使用
responseMode="File"
但是這個技巧將使用相對文件路徑,除非您解鎖或設置為 truesystem.webServer/httpErrors allowAbsolutePathsWhenDelegated
。範例 web.config 摘錄:
<httpErrors> <remove statusCode="404" subStatusCode="-1" /> <error statusCode="404" prefixLanguageFilePath="" path="error\404.htm" responseMode="File" /> </httpErrors>
使用
executeURL
時,文件應該是動態呈現的文件(例如 .asp)。執行的文件必須包含設置響應狀態程式碼的腳本。例子:
- 將您的 404.htm 更改為 404.asp
- 將以下程式碼保存在 404.asp 的頂部:
<% response.status = "404 Page Not Found" %>