【发布时间】:2013-09-23 15:46:14
【问题描述】:
我知道 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 服务器:将 CF 映射添加到站点的 Web 根目录。然后将缺少的模板处理程序放置在网站的根目录中,而不是 CF 默认的 Web 根目录中,最后在 cfadmin 中使用映射文件夹指向网站根目录中缺少的模板处理程序。同样的问题。在 CF9 中运行良好,而在 CF10 中则完全不行。
EDIT2:
正如 Miguel F 在 cmets 中指出的那样,您可以在 CF Admin 中关闭 HTML 错误代码,这将使 Missing Template Handler 触发……但是您会得到一个 200 标题。显然 cfheader 语句被忽略,因为我尝试将 cfheader 放在模板的开头和结尾......仍然产生 200。视觉上很好,但就 SEO 而言,那是一场灾难。刚看了看,我的 CF9 服务器不需要取消选中此设置,它们的处理程序才能工作。
EDIT3
Dana Kowalski 的解决方案向公众显示详细的 IIS 错误,因此对于一个 404 错误,比如说,一个虚构的扩展名 (foo.xyz),屏幕将显示文件路径。默认行为是不显示详细错误,除非在本地运行模板,并向访问者显示自定义错误页面。 CF 错误模板应该可以在该设置下正常工作。
可能的解决方案
作为调试此问题的一部分,我退回到 ColdFusion 9,并在调试一个单独的相关问题时返回 may have discovered the solution。
【问题讨论】:
-
对于测试试试这个,从您的 ColdFusion 404.cfm 页面中删除
<cfheader statuscode="404" statustext="Not Found">行,看看会发生什么。您现在看到 ColdFusion 404.cfm 输出了吗? -
刚刚试过了,没有没有变化。 IIS 仍在处理错误。
-
您是否也在 ColdFusion 管理员中启用了启用 HTTP 状态代码(在“设置”页面下)?基本上我想指出的是我试图在this other question regarding CF9 上解释的内容。当 ColdFusion 返回 404 状态代码时,IIS 也会处理/显示它自己的 404 页面。我猜您的 ColdFusion 404 页面实际上正在执行,但您看到的是 IIS 页面。您还可以将日志记录或电子邮件添加到您的 CF 404 页面以验证它是否正在处理。
-
是的,它们已启用,是的,确实解决了问题-正如您所说。我将使用附加信息更新帖子。
-
只是为了清楚并回答您的问题 - ColdFusion 404 处理程序正在触发。返回并重新启用 启用 HTTP 状态代码 设置,然后返回到带有
<cfheader statuscode="404" statustext="Not Found">行的原始 404.cfm 文件。在 404.cfm 模板中添加向自己发送电子邮件。现在请求一个不存在的 CFM 文件。我猜你会收到一封来自 404.cfm 模板的电子邮件。它正在运行,只是对你“隐藏”。
标签: iis coldfusion coldfusion-10