IIS 404 重定向被忽略

IIS 404 重定向被忽略

所以我有一个非常基本的网站,托管在 IIS 中(目前只是直接的原始 html,没有 .Net 代码)

在我的 web.config 中我有以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <httpErrors>
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/404.html" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</configuration>

这是由 IIS 管理器添加到 web.config 中的 - 它反映了我在网上找到的将 404 错误重定向到我的自定义 404 页面的有效配置。

HTTP Error 404.0 - Not Found但是,每当我转到不存在的页面时,我仍然会得到 IIS 生成的页面。

知道我在这里做错了什么吗?

设置:

  • IIS 10/IIS 8.5(均已测试)
  • Windows 10/Windows 8.1(均已测试)
  • 默认应用程序池
  • Chrome、Edge、Internet Explorer、Firefox(所有最新版本)

答案1

每当我的 IIS 配置文件中的配置元素没有产生我期望的行为时,我首先查看的总是官方的(而且相当全面的)IIS.net 配置参考文档。

如果您浏览到httpErrors并向下滚动到“属性”,您会发现该errorMode属性的默认值为“DetailedLocalOnly”,这意味着:

如果请求来自本地计算机,则返回详细的错误信息,如果请求来自外部计算机,则返回自定义错误消息。

啊哈!如果您的请求导致错误页面在本地浏览时,您将获得一个详细的错误页面,而不是自定义的错误页面!

就在下面,有一个Custom值的条目:

使用您指定的自定义页面替换模块或服务器生成的错误。此模式有助于向最终用户提供更友好的错误消息。

笔记:此设置关闭详细错误,即使对于本地请求也是如此。

就是这样,只需向节点添加errorMode值为的属性即可覆盖默认值:CustomhttpErrors

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

相关内容