4

我知道 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,并且可能在调试单独的相关问题时发现了解决方案。

4

1 回答 1

1

在 IIS 管理器中,单击相关站点。选择错误页面选项。选择右侧的“编辑功能设置”链接。检查是否选择了“详细错误”选项。

如果您选择了其他两个中的任何一个,则有时 IIS 7.x 会接管而不让 ColdFusion 处理它。

于 2013-09-18T19:43:35.307 回答