我正在考虑某人可能会在网址中提供Application.cfc的情况。我知道这不会起作用,因为它由ColdFusion引擎保留,用户将看到错误。
是否可以在这种情况下重定向用户?
答案 0 :(得分:3)
我刚用一个站点范围的错误处理程序成功捕获它。这对你来说是一个可行的解决方案吗?
小更新,想出来了:
<cftry>
<cfif error.Message EQ "Invalid request of Application.cfm, Application.cfc, or OnRequestEnd.cfm file.">
<cflocation url="#getContextRoot()#/#getDirectoryFromPath(error.Template)#">
</cfif>
<cfcatch>that didn't work</cfcatch>
</cftry>
答案 1 :(得分:1)
我认为CF拦截对application.cfc,application.cfm和onrequestend.cfm的调用,你可以抓住错误。
我刚刚在我的一个coldfusion开发站点上做了一些测试,并在定义的IIS网站主文件夹之前将application.cfc带到了父文件夹,并尝试调用该文件。它找不到找不到文件的404错误。由于coldfusion搜索到根文件夹以查找文件,因此即使它不在IIS可访问文件夹中,它仍会找到您的application.cfc文件。 IIS将为直接请求转换404错误。
处理您的404错误可能是解决方案。
我认为这也是非Windows服务器环境的解决方案。
答案 2 :(得分:1)
嗯:您应该像处理网站上任何未被捕获的错误一样处理此类错误:将其留给onError()
处理程序/ <cferror>
代码/ site-wide error template。当你使用Application.cfc时,onError()是最好的方法。
这种错误不需要特殊处理,但任何类型的未处理错误应该得到适当处理。如果你不这样做(听起来你不是这样),你应该是。