如果你想知道这个人的web配置可能看起来是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<httpErrors existingResponse="PassThrough" />
...
</system.webServer>
</configuration>
在IIS的早期版本中,如果您的自定义脚本返回一个错误代码,IIS忽略它,让它通过。 但是您也可以将其设置为使用自定义脚本处理错误状态。
在我的旧服务器,如果给定的URL是404,IIS的建立是为了EXECUT /404.cfm,其中显示一个错误页和返回使用<cfheader>
404个状态码。
但是,现在如果该脚本返回404状态码,最终结果是IIS返回服务器错误,而不是返回带有404状态码的响应。
避免这种情况的唯一方法是使用existingResponse="PassThrough"
,然后使用在CFAdmin中设置的站点范围的“模板未找到”模板。
以下是有趣的部分。我将index.cfm设置为默认索引,并且只有默认索引,用于我的网站。
如果我去/about/
和/about/index.cfm
存在,那么它呈现该页面,就好像我已经要求它为/about/index.cfm
。 如果我去/about/index.cfm
和/about/index.cfm
确实不是存在,它会执行站点范围内的404模板。
但如果我去/about/
和/about/
不存在作为一个URL,它不试图加载/about/index.cfm
,从而引发站点范围内的404模板。相反,它呈现一个空白页面!
据我所知,这个问题没有可行的解决方案。看起来只有使用.Net编写的人才能解决这个问题,因为他们可以在响应中放置一个标志,它们生成的字面意思是告诉IIS“忽略状态码”。我认为微软对支持备用Web应用程序并不感兴趣。
基本上,这是解决方案: 摆脱existingResponse="PassThrough"
和返回错误的状态码。
其他任何事情都太难实施。请注意,如果您正在制作RESTful应用或API,则这不起作用。在这种情况下,您必须为此创建一个虚拟目录,您可以为其分配一个自定义web.config文件,其中使用使用existingResponse="PassThrough"
。但是,如果您需要能够允许自定义错误处理和自定义404处理,那么您将被有效地使用。
好消息是,除了API和Ajax之外,唯一一个有人会关心状态代码的实际情况是当他们看着你的标题时,在这种情况下,他们会看到你运行IIS,只是为你感到难过。
认为好主意应该是显示web.config的示例 – Sergii 2011-02-11 11:23:36
IIS中的默认文档是否设置为index.cfm?如果它位于index.aspx或index.htm然后它可能试图通过404错误通过没有在ColdFusion上的404错误 – 2011-02-11 13:01:52
在网站的IIS属性,看看404错误处理程序页面设置为什么。 – eapen 2011-02-11 14:14:13