我可以在使用 httpErrors 时告诉 IIS 8.5 return 404 吗?

Can I tell IIS 8.5 to return a 404 when using httpErrors?

我正在使用 IIS 8.5 开发一个(Web 表单)站点 运行,目前正在为 404 和 500 设置错误处理。

我已经有了 system.web > customErrors 设置,但是由于我们 运行 在 IIS 的集成 mode/newer 版本中,它是从 system.webServer 中提取的> httpErrors.

使用 IIS GUI,我选择用站点上的静态 HTML 文件替换标准 IIS 错误页面:

<httpErrors errorMode="Custom">
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" prefixLanguageFilePath=""
        path="/problem.html" responseMode="ExecuteURL" />
    <remove statusCode="500" subStatusCode="-1" />
    <error statusCode="500" prefixLanguageFilePath=""
        path="/problem.html" responseMode="ExecuteURL" />
</httpErrors>

不幸的是,虽然显示了正确的错误页面,但返回的不是 404,而是 200,对于 500 个错误,返回 302 后跟 200。

对于旧版本的 IIS,或者那些不在集成模式下 运行 的 IIS,您可以在 customErrors 元素上设置 redirectMode="ResponseRewrite",这将解决这个问题。

我尝试将 httpErrors 上的 existingResponse 设置为所有三个可用选项,并尝试更新设置 responseMode="File",但这些都没有改变。

有什么方法可以为 httpErrrors element 做类似的事情吗?还是我坚持将错误指向 ASP.NET 页面并从那里返回适当的错误?

谢谢!

要解决此问题,您可以将此配置设置到 WebConfig 文件中的 <httpErrors> 中。像这样:

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
      <clear/>
      <error statusCode="404" path="/WebForms/Index.aspx" responseMode="File"/>
    </httpErrors>
<system.webServer/>

responseMode=File会保留原来的错误代码,显示静态页面。