为了能够让我的应用程序(Umbraco CMS)处理404错误,我需要在web.config中进行以下设置:
<httpErrors existingResponse="PassThrough" />
它适用于从Umbraco显示自定义404错误页面,但是当找不到静态文件时,它不能用于显示404错误页面。
例如http://www.example.com/non-existing-file.png会返回404状态代码,但响应为空。这符合PassThrough模式的描述:
PassThrough - 如果existingResponse被视为“PassThrough”,则自定义 错误模块将始终通过模块的响应。这个 如果模块,设置将使自定义错误模块返回空白响应 不要设置任何文字。 (http://blogs.iis.net/ksingla/archive/2008/02/18/what-to-expect-from-iis7-custom-error-module.aspx)
什么是“自定义错误模块”?如何让它返回非空白响应?
更新
在逐步完成Umbraco中的请求处理例程(使用调试器)之后,我对问题空间有了更好的理解。如上面的引文所述,当existingResponse =“PassThrough”时,所有http错误的处理都在自定义模块中完成。因此,为了回答我自己的问题,“自定义错误模块”在本例中是“UmbracoModule”。
解决此问题的一种方法是创建一个新的自定义模块,用于检查磁盘上是否存在静态文件。它可以做得很好,我从IIS读取静态文件列表,并从web.config读取customErrors或httpErrors元素的配置,以获取自定义错误页面。但我认为这是粗糙的解决方案。我宁愿将责任归还给IIS。
有什么想法吗?
答案 0 :(得分:0)
你是对的。为了其他寻求帮助的人的利益,这里有一些关于404处理的额外信息。
Old Umbraco wiki page - 使用文件/config/umbracoSettings.config描述您的解决方案
404 for files - 适用于Umbraco 7并描述了标签的使用&lt; httpErrors /&gt;
IIS version 6 fix - 修复IIS6及其与IIS7的比较