无法让IIS 7 / Coldfusion提供404

时间:2013-01-16 21:34:35

标签: iis iis-7 coldfusion http-status-code-404 coldfusion-10

所以...我们有一个自定义CMS。我们有一个重写规则,任何页面请求(当文件不存在时)都会转到root / index.cfm文件。我们在数据库中搜索有问题的页面。如果页面存在,我们会提供正确的模板等。如果页面不存在,我想要提供404页面。现在我“想”我不能在IIS中执行此操作,因为我需要在CF中处理请求,所以它必须通过。该文件将始终存在。当页面不存在时我尝试使用<cfheader statusCode="404" >然后包含一些html,它会在我的html之前将The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.放在页面顶部。为了让它显示页面,我必须从IIS中删除404状态代码处理程序。

此外,当我获取谷歌时,它获得了301.但是当我在Firefox中查看响应标题时,我得到了。

Transfer-Encoding: chunked
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 16 Jan 2013 21:31:42 GMT
404 Not Found

我尝试过重定向和各种事情的组合。我打开让IIS处理404,如果有办法,但我无法弄清楚如何让Coldfusion正确地发送404以便谷歌做对了。网站管理员工具对我很生气,因为我在此之前提供了“Soft 404s”,所以我正在努力解决这个问题。

我也试过设置<httpErrors existingResponse="PassThrough" />无论做什么,但也没有用。我一直在寻找其他线程,试图解决这个问题,但事实并非如此。

编辑:进一步研究,查看Firebug和amp;中的标题信息。 Chrome我清楚地看到标题是404.为什么像Google这样的Bing和Fetch会有不同的说法?

我测试了这样一个事实,即如果我将.cfm添加到网址,它就像谷歌一样将提供看到404.但是如果没有.cfm,它认为它是301. Firebug将两者视为404.这似乎是一个谷歌问题。

答案:

所以我今天早上做了更多的测试(实际上我添加了奖金之后),我注意到在网站管理员工具中,Google正确地将我的一个页面标记为404.所以我开始研究它。我有一个“添加尾随斜线规则”。 Google将domain.com/page注意为domain.com/page/的301(我猜是正确的)。但它确实注意到domain.com/page/为404.我认为使用尾随斜杠规则,因为我有正确的方法,但是,我应该做一些不同的事情,或者使用带有斜杠的重定向“正确”做事的方式,即使谷歌有时想要我这样做。

1 个答案:

答案 0 :(得分:0)

我不完全确定我会遵循您的方法的细节,因此我会给您一些您需要注意的事项,以使这种方法运作良好(或者至少对我来说效果最好)

在“错误页面”下,确保您的404错误页面设置为“在此站点上执行URL”(我通常设置为“/404.cfm”)。这将确保为404页面正确调用ColdFusion页面(听起来你的工作正常)。

在“Handler Mappings”下,双击“.cfm”的处理程序。然后单击“请求限制...”按钮。它应该打开“映射”选项卡。 <= p>,不应选中“仅在请求映射到:时调用处理程序:”复选框

这实际上可以解决这种操作问题,因为这意味着如果文件不存在,IIS将不会调用ColdFusion。如果您的404设置正确,但这仍然是一个问题,但仍有待研究。

当您处于“处理程序映射”部分时,查找路径为“*”的IsapiModule。我总是设置为ColdFusion - 不确定这是否有所作为。

要查看的另一件事是“默认文档”设置。请记住,这可能会在转发到文件夹时影响您。

您可能还会再次查看重写规则,并确保它不会添加已存在的斜杠。