我一直在寻找答案,但我无法找到确切的信息来源。我所追求的是能够记录/通知每个404 错误。我在网上找到的信息解决了一些404 错误,但不是全部。我做了一些测试,下面是测试的结果。您如何处理 Mura 网站的 404 错误?
我正在使用 IIS 和 Adobe ColdFusion 和 Mura 6.2.6338。
我创建了自己的 onSite404 函数来从 Mura 捕获该事件。
我创建了自己的 ColdFusion 页面来捕获 IIS 触发它的 404 处理程序时的情况。
根据我的测试,似乎有一些内置的 Mura 功能可以从 Web 根目录处理 404。它们似乎没有遵循标准的 404 执行模式。不确定我是否在任何地方看到过记录?
在我的一些测试过程中,我收到了几个超时错误。不知道为什么。可能是我试图从我的自定义 IIS 404 页面调用正常 Mura 处理的方式。
基本上我想要的是让所有 IIS 404 错误都调用我自己的自定义 ColdFusion 页面,我可以在其中记录/通知错误,然后显示正常的 Mura 404 页面(不使用重定向,因为这会否定用户的 404 状态代码)。
以下是我的测试结果:
仅定义了 Mura 404 页面:
Requested URL onSite404 IIS 404 Displayed
called called
/filedoesnotexist.cfm No n/a shows home page
/filedoesnotexist.htm No n/a shows home page
/filedoesnotexist.asp No n/a shows iis 404 error
/folderdoesnotexist/ Yes n/a shows iis 404 error AND mura 404 page
/folderdoesnotexist/filedoesnotexist.cfm Yes n/a shows iis 404 error AND mura 404 page
/folderdoesnotexist/filedoesnotexist.htm Yes n/a shows iis 404 error AND mura 404 page
/folderdoesnotexist/filedoesnotexist.asp No n/a shows iis 404 error
定义 Mura 404 页面并且 IIS 404 指向相同的 Mura 404 页面/index.cfm/404/
:
Requested URL onSite404 IIS 404 Displayed
called called
/filedoesnotexist.cfm No Unknown shows home page
/filedoesnotexist.htm No Unknown shows home page
/filedoesnotexist.asp No Unknown shows mura 404 page
/folderdoesnotexist/ Yes Unknown shows mura 404 page
/folderdoesnotexist/filedoesnotexist.cfm Yes Unknown shows mura 404 page
/folderdoesnotexist/filedoesnotexist.htm Yes Unknown shows mura 404 page
/folderdoesnotexist/filedoesnotexist.asp No Unknown shows mura 404 page
定义了 Mura 404 页面并且 IIS 404 指向它自己的 404 页面/iis404.cfm
:
Requested URL onSite404 IIS 404 Displayed
called called
/filedoesnotexist.cfm No No shows home page
/filedoesnotexist.htm No No shows home page
/filedoesnotexist.asp No Yes shows custom iis 404 page
/folderdoesnotexist/ Yes Yes shows custom iis 404 page
/folderdoesnotexist/filedoesnotexist.cfm Yes Yes shows custom iis 404 page
/folderdoesnotexist/filedoesnotexist.htm Yes Yes shows custom iis 404 page
/folderdoesnotexist/filedoesnotexist.asp No Yes shows custom iis 404 page
定义了 Mura 404 页面并且 IIS 404 指向它自己/iis404.cfm
在 Web 根目录中的 404 页面,该页面通过以下方式调用 Mura 处理application.contentServer.handleRootRequest()
:
Requested URL onSite404 IIS 404 Displayed
called called
/filedoesnotexist.cfm No No shows home page
/filedoesnotexist.htm No No 500 Internal server error – coldfusion.runtime.RequestTimedOutException on query
/filedoesnotexist.asp No Yes shows home page
/folderdoesnotexist/ Yes Yes shows home page
/folderdoesnotexist/filedoesnotexist.cfm Yes Yes shows home page
/folderdoesnotexist/filedoesnotexist.htm Yes Yes shows CF sitewide error page - coldfusion.runtime.RequestTimedOutException on query
/folderdoesnotexist/filedoesnotexist.asp No Yes shows home page
定义了 Mura 404 页面并且 IIS 404 指向它/siteid/iis404.cfm
在站点 id 根中调用 Mura 处理的自己的 404 页面application.contentServer.parseURLLocal()
:
Requested URL onSite404 IIS 404 Displayed
called called
/filedoesnotexist.cfm No No shows home page
/filedoesnotexist.htm No No 500 Internal server error – coldfusion.runtime.RequestTimedOutException on query
/filedoesnotexist.asp No Yes shows home page
/folderdoesnotexist/ Yes Yes shows home page
/folderdoesnotexist/filedoesnotexist.cfm Yes Yes shows home page
/folderdoesnotexist/filedoesnotexist.htm Yes Yes shows CF sitewide error page - coldfusion.runtime.RequestTimedOutException on query
/folderdoesnotexist/filedoesnotexist.asp No Yes shows home page
Mura 似乎正在处理除 web 根目录之外的任何 ColdFusion 404 错误,我可以在 onSite404 方法中进行处理。但我不知道如何让其他 404 错误来进行我的处理并调用 Mura 404 页面以显示给用户。
只是记录一些更多的发现。我发现在网上的几篇博客文章中提到,对于 IIS,您应该在配置部分下existingResponse
设置它,它将修复一些 404 问题。好吧,这是我进行更改后的测试结果:PassThrough
httpErrors
定义了 Mura 404 页面并且 IIS 404 指向它自己的 404 页面/iis404.cfm
并且 IIShttpErrors
设置为PassThrough
for existingResponse
:
Requested URL onSite404 IIS 404 Displayed
called called
/filedoesnotexist.cfm No No shows home page
/filedoesnotexist.htm No No shows CF sitewide error page - coldfusion.runtime.RequestTimedOutException on query
/filedoesnotexist.asp No No shows blank 404 page
/folderdoesnotexist/ Yes No shows mura 404 page
/folderdoesnotexist/filedoesnotexist.cfm Yes No shows mura 404 page
/folderdoesnotexist/filedoesnotexist.htm Yes No shows mura 404 page
/folderdoesnotexist/filedoesnotexist.asp No No shows blank 404 page
因此,使用此配置,IIS 404 似乎从未真正调用过我的 ColdFusion 模板。更糟糕的是,它只是发送一个空白的 404 响应。我想按设计工作,因为 PassThrough 告诉它只是传递响应。
在@Grant 的回答之后记录另一个结果。我已经尝试过 Mura 的standard404Handler
方法,但不想覆盖它的所有功能,因为老实说,我不确定它在做什么,也不想破坏一些标准的 Mura 功能。另外,我看到它是从这个方法onSite404
中调用的。所以我会假设覆盖该方法的测试结果与standard404Handler
使用“onSite404”方法时没有什么不同。我的测试结果支持这一点。
定义 Mura 404 页面并且 IIS 404 指向它自己的 404 页面 /iis404.cfm 并覆盖 Mura standard404Handler
:
Requested URL onSite404 IIS 404 standard404Handler Displayed
called called called
/filedoesnotexist.cfm No No No shows home page
/filedoesnotexist.htm No No No shows home page
/filedoesnotexist.asp No Yes No shows custom iis 404 page
/folderdoesnotexist/ No No Yes shows mura 404 page
/folderdoesnotexist/filedoesnotexist.cfm No No Yes shows mura 404 page
/folderdoesnotexist/filedoesnotexist.htm No No Yes shows mura 404 page
/folderdoesnotexist/filedoesnotexist.asp No Yes No shows custom iis 404 page
现在很明显,我需要同时使用 MuraonSite404
方法和 IIS 配置中的某种自定义 404 处理程序。因此,如果我能找到一种方法来显示 Mura 404 页面,同时保留 404 状态代码,那么在我的自定义 404 处理程序运行之后,这将解决我的问题。