Can';我们无法让IIS 7/Coldfusion交付404

Can';我们无法让IIS 7/Coldfusion交付404,iis,iis-7,coldfusion,http-status-code-404,coldfusion-10,Iis,Iis 7,Coldfusion,Http Status Code 404,Coldfusion 10,所以。。。我们有一个定制的CMS。我们有一个重写规则,任何页面请求(当文件不存在时)都会转到root/index.cfm文件。在这里,我们搜索数据库中有问题的页面。如果页面存在,我们将提供正确的模板,等等。如果页面不存在,我想提供404页面。现在我“认为”我不能在IIS中这样做,因为我需要在CF中处理请求,所以它必须通过。该文件将始终存在。当页面不存在时,我尝试使用,然后包含一些html,它会将您要查找的资源放置在已删除、名称已更改或暂时不可用的位置。位于页面顶部的“我的html”之前。为了让它

所以。。。我们有一个定制的CMS。我们有一个重写规则,任何页面请求(当文件不存在时)都会转到root/index.cfm文件。在这里,我们搜索数据库中有问题的页面。如果页面存在,我们将提供正确的模板,等等。如果页面不存在,我想提供404页面。现在我“认为”我不能在IIS中这样做,因为我需要在CF中处理请求,所以它必须通过。该文件将始终存在。当页面不存在时,我尝试使用
,然后包含一些html,它会将
您要查找的资源放置在已删除、名称已更改或暂时不可用的位置。
位于页面顶部的“我的html”之前。为了让它显示页面,我必须从IIS中删除404状态代码处理程序

此外,当我以谷歌(Google)的身份获取时,它得到的是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,这样Google就可以正确地使用它。网站管理员工具对我很生气,因为我在这之前交付了“软404”,所以我正试图解决这个问题

我也尝试过设置
,不管它做什么,但都没用。我一直在寻找其他线索试图找出这个问题,但就是不能

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

我测试了这样一个事实:如果我在URL中添加.cfm,它会像谷歌提供的SEE404一样获取。但是如果没有.cfm,它认为是301。Firebug将两者都视为404。这似乎是谷歌的问题

答案类型:


所以我今天早上做了更多的测试(就在我添加了一个赏金之后),我注意到在网站管理员工具中,谷歌正确地将我的一个页面标记为404。所以我开始调查。我有一个“添加尾部斜杠规则”。谷歌将
domain.com/page
作为301(我猜是正确的)通知
domain.com/page/
。但它注意到,
domain.com/page/
是404。我认为使用我现有的尾随斜杠规则是正确的方法,但是,我应该做一些不同的事情,或者使用斜杠重定向是“正确”的方法,即使谷歌有时想对我指手画脚。

我不完全确定我是否遵循了你的方法的细节,因此,我将向您介绍一些您需要了解的内容,以使这种方法能够很好地工作(或者至少是最适合我的方法)

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

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

这可能会导致此类操作失败,因为这意味着如果文件不存在,IIS将不会调用ColdFusion。如果您的404设置正确,这不应该是一个问题,但仍然需要研究

在“处理程序映射”部分中,查找路径为“*”的IsapiModule。我的总是设置为ColdFusion-不确定这是否有区别

另一个需要注意的是“默认文档”设置。请记住,转发到文件夹时,这可能会影响您


您还可以再次查看您的重写规则,确保它没有在已经存在斜杠的地方添加斜杠。

是否使用
cfheader
发送
statustext
?应该是这样的
。我就是这样做的,它是这样工作的(在CF9中)。我已经补充说是的。我在Firebug中看到了标题。然而,当URL上没有.cfm时,谷歌将其视为301,即使Firebug将其视为404。因此,当我不需要时,我会得到软404错误。当请求没有指定.cfm文件时,您是否使用URL重写规则或类似规则?IIS重写、.htaccess等。IIS重写。但是,domain.com之后的所有请求都会转到
domain.com/index.cfm。
示例
domian.com/test/page/
domain.com/test/page.cfm
都会正确路由到
domain.com/index.cfm
。在Firebug/Chrome中,两者的处理相同,输出相同。标题是404。谷歌认为
domain.com/test/page/
是301,而
test/page.cfm
是404。我认为问题不在于IIS。我将.com之后的所有内容都设置为查询字符串。在ColdFusion管理员中,您是否可以打开或关闭
启用HTTP状态码
选项?所有页面请求都会被发送到index.cfm,这是应该的。我的网站上没有“页面”。我在根目录后获取所有URL,在数据库中搜索匹配的页面,并显示该页面(如果存在)。如果没有,我必须显示一个404页面。IIS将不会处理我的404,因为没有物理页面文件。