IIS 7 在自定义 404 错误页面上返回 HTTP 200

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>

答案1

然而,切换到使用responseMode="File"这个技巧是使用相对文件路径,除非你解锁或设置为 true system.webServer/httpErrors allowAbsolutePathsWhenDelegated

web.config 摘录示例:

<httpErrors>
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath="" path="error\404.htm" responseMode="File" />
</httpErrors>

答案2

使用时executeURL,文件应为动态呈现的内容(例如 .asp)。执行的文件必须包含设置响应状态代码的脚本。

例子:

  1. 将 404.htm 更改为 404.asp
  2. 将以下代码保存在404.asp的顶部:

<% response.status = "404 Page Not Found" %>

答案3

您是否尝试过在属性中更改ExecuteURL为?RedirectresponseMode

<httpErrors existingResponse="Replace" defaultResponseMode="Redirect" errorMode="Custom">
     <remove statusCode="404"/>
     <error statusCode="404" responseMode="Redirect" path="/index1.htm"/>          
</httpErrors>

参考:https://techcommunity.microsoft.com/t5/iis-support-blog/issue-iis-logs-200-status-code-instead-of-404/ba-p/297652

相关内容