所以我有一个非常基本的网站,托管在 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
值为的属性即可覆盖默认值:Custom
httpErrors
<httpErrors errorMode="Custom">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/404.html" responseMode="ExecuteURL" />
</httpErrors>