所以我有一个非常基本的网站托pipe在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>
这是由IISpipe理器添加到web.config – 它反映了我在网上find的404错误的有效configurationredirect到我的自定义404页面。
但是,我仍然得到IIS生成的HTTP Error 404.0 - Not Found页面,只要我去一个不存在的页面。
任何想法我在这里做错了吗?
build立:
每当我的IISconfiguration文件中的configuration元素不会产生我期望的行为时,我所看到的第一个地方总是官方的(也是相当全面的) IIS.netconfiguration参考文档。
如果浏览到httpErrors页面并向下滚动到“Attributes”,您会发现errorMode属性的默认值为“DetailedLocalOnly”,这意味着:
如果请求来自本地计算机,则返回详细的错误信息,如果请求来自外部计算机,则返回自定义错误消息。
啊哈! 如果您的请求导致在本地浏览时出现错误页面,您将得到一个详细的错误页面,而不是您自定义的页面!
就在下面,有一个Custom值的条目:
用您指定的自定义页面replace模块或服务器生成的错误。 此模式在向最终用户提供更友好的错误消息方面很有用。
注意 :即使对于本地请求,此设置也会closures详细的错误。
就是这样,只需将值为Custom的属性errorMode添加到httpErrors节点即可覆盖默认值:
<httpErrors errorMode="Custom"> <remove statusCode="404" subStatusCode="-1" /> <error statusCode="404" prefixLanguageFilePath="" path="/404.html" responseMode="ExecuteURL" /> </httpErrors>