我在使用 IIS 中的自定义错误处理程序(执行 URL)在 Windows 2008 R2 x64 上的 ColdFusion 10 中正确处理 404 错误时遇到了困难。我已经在以前版本的 CF 中做到了这一点,没有任何问题。在 IIS 中,在网站功能下,我打开“错误页面”并将其设置为对所有 404 错误执行“/404.cfm”。
我遇到的问题是 404.cfm 页面的输出没有完全发送回浏览器,并且页面没有正确加载。有时我一无所获,有时我得到 1K,有时我得到更多。这是非常不一致的。
除了在 IIS 中设置 404.cfm 处理程序外,我还在 Application.cfm 中的 onMissingTemplate() 方法中调用它:
<cffunction name="onMissingTemplate"
returnType="boolean"
output="true">
<cfargument name="thePage" type="string" required="true">
<cftry>
<cfmodule template="../../../404.cfm" thePage="#Arguments.thePage#">
<cfcatch>
<cfoutput><p>An error occurred</p></cfoutput>
</cfcatch>
</cftry>
<cfreturn true />
</cffunction>
在我的404.cfm错误处理程序中,我正在调用:
<cfheader statuscode="404" statustext="Not Found">
...然后我输出一堆东西。
当我在 404.cfm 中删除对 cfheader 的调用时,错误处理程序会正确加载 [for ColdFusion requests]。那是因为没有任何东西通过 IIS - 相反,它只是通过 ColdFusion 中的 onMissingTemplate() 方法。但是,响应头给了我一个 200 状态码,这是一个问题!出于显而易见的原因,它需要是 404 状态码。
当我包含 cfheader 调用或请求非 ColdFusion 页面时(IIS 将生成 404 状态代码),我的 404.cfm 处理程序的输出未完全返回到浏览器。我认为这与 IIS 采取行动有关。
我确实在 CF 错误数据库中报告了这一点,但我想知道我是否做错了什么。错误在这里:https ://bugbase.adobe.com/index.cfm?event=bug&id=3488063