我知道 CF 10 有很多关于 404 处理的问题。这似乎与其他报道不同。细节:
- Win2k8 R2/64 和 IIS7.5
- 从不同服务器上的相同配置升级。唯一的区别是 CF9 -> CF 10。在 CF9 上一切正常。Adobe CF9 Lockdown 在原始服务器上实施,CF10 Lockdown 在此服务器上实施。
- 缺少在 CF Admin 中设置为 /404.cfm 的模板处理程序,它应转换为 Cfusion 根 (c:\ColdFusion10\cfusion\wwwroot)。
- IIS 已配置为跟踪失败的 404 请求
- IIS 404 处理是默认的(最初执行 CF URL,但为了简化调试而删除)。
- 缺少模板处理程序所在的 Coldfusion webroot 是默认安装位置
- IIS 站点根目录完全不同:c:\Other\Place\SiteRoot\
- 在同一个 ColdFusion webroot 中的 CF Admin 中也设置了一个站点范围的错误处理程序,并按预期工作。
404.cfm 很简单:
<cfheader
statuscode="404"
statustext="Not Found">
<h1>404</h1><p>Page not found</p>
<cfoutput>#now()#</cfoutput>
输入错误的 url [domain]/foo.cfm 应该会显示上述模板。相反,我得到一个 IIS 错误屏幕。CF 缺少模板处理程序将被忽略。IIS 失败的请求跟踪表明 url 是
http://[mydomain]:80/jakarta/isapi_redirect.dll
详细视图显示在第 1 步
RequestURL="http://[mydomain]:80/foo.cfm
我已经看到很多关于 CF10 和 404 的问题,但从来没有完全忽略丢失的模板处理程序分配。在 CF9 中,这将按预期生成输出。有人见过这样的吗?
编辑:
我也尝试过配置它以匹配我正在运行的不同 CF9 服务器:向站点的 Web 根目录添加了 CF 映射。然后将缺少的模板处理程序放在网站的根目录中,而不是 CF 默认的 Web 根目录中,最后在 cfadmin 中使用映射文件夹指向网站根目录中缺少的模板处理程序。同样的问题。在 CF9 中运行良好,而在 CF10 中则完全不行。
EDIT2:
正如 Miguel F 在评论中指出的那样,您可以在 CF Admin 中关闭 HTML 错误代码,这将使 Missing Template Handler 触发......但是您会得到一个 200 标题。显然 cfheader 语句被忽略,因为我尝试将 cfheader 放在模板的开头和结尾......仍然产生 200。视觉上很好,但就 SEO 而言,那是一场灾难。刚看了看,我的 CF9 服务器不需要取消选中此设置以使其处理程序正常工作。
EDIT3
Dana Kowalski 的解决方案向公众显示详细的 IIS 错误,因此对于一个 404 错误,比如说,一个虚构的扩展名 (foo.xyz),屏幕将显示文件路径。默认行为是不显示详细错误,除非在本地运行模板,并向访问者显示自定义错误页面。CF 错误模板应该可以在该设置下正常工作。
可能的解决方案
作为调试此问题的一部分,我退回到 ColdFusion 9,并且可能在调试单独的相关问题时发现了解决方案。