3

我只是在考虑有人可能会在 URL 中提供 Application.cfc 的场景。我知道这不会起作用,因为它是由 ColdFusion 引擎保留的,用户会看到一个错误。

在这种情况下是否可以重定向用户?

4

3 回答 3

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>
于 2012-11-30T22:58:24.890 回答
1

好吧:您应该像处理网站上任何未捕获的错误一样处理此类错误:将其留给onError()处理程序/<cferror>代码/站点范围的错误模板。当您使用 Application.cfc 时,onError() 是这里最好的方法。

这种错误不需要特殊处理,但任何类型的未处理错误都应该得到适当的处理。如果你不这样做(听起来你不是),你应该这样做。

于 2012-12-01T10:22:09.693 回答
1

我认为 CF 在可以抓取错误的位置拦截对 application.cfc、application.cfm 和 onrequestend.cfm 的调用。

我刚刚在我的一个 Coldfusion 开发站点上进行了一些测试,并将 application.cfc 放在定义的 IIS 网站主文件夹之前的父文件夹中,并尝试调用该文件。它为找不到文件返回 404 错误。由于coldfusion 搜索到根文件夹来查找文件,它仍然会找到您的application.cfc 文件,即使它不在IIS 可访问文件夹中。IIS 会将您的 404 错误转为直接请求。

处理您的 404 错误可能是解决方案。

我认为这也是非 Windows 服务器环境的解决方案。

于 2012-11-30T21:26:03.847 回答