【发布时间】:2013-01-29 23:45:23
【问题描述】:
所以...我们有一个自定义 CMS。我们有一个重写规则,任何页面请求(当文件不存在时)都会转到 root/index.cfm 文件。在那里,我们在我们的数据库中搜索有问题的页面。如果页面存在,我们会提供正确的模板等。如果该页面不存在,我想提供一个 404 页面。现在我“认为”我不能在 IIS 中执行此操作,因为我需要在 CF 中处理请求,所以它必须通过。该文件将始终存在。当页面不存在时,我尝试使用<cfheader statusCode="404" >,然后包含一些html,它将The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. 放在我的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”,所以我正在尝试解决这个问题。
我也尝试过设置<httpErrors existingResponse="PassThrough" /> 无论如何,但也没有用。我一直在寻找其他线程试图弄清楚这一点,但无法解决。
编辑:进一步研究,查看 Firebug 和 Chrome 中的标头信息,我清楚地看到标头说 404。为什么 Fetch as Bing 和 Fetch as Google 会说不同?
我测试了一个事实,即如果我将 .cfm 添加到 URL 中,它会以 Google 的方式获取并提供看到 404。但是,如果没有 .cfm,它会认为它是 301。Firebug 将两者都视为 404。这似乎是 Google 的问题。
回答类型:
所以我今天早上做了更多测试(实际上是在我添加赏金之后),我注意到在网站管理员工具中,Google 正确地将我的一个页面标记为 404。所以我开始研究它。我有一个“添加尾部斜杠规则”。谷歌将domain.com/page 通知为domain.com/page/ 的301(我猜是正确的)。但它确实注意到domain.com/page/ 为 404。我认为使用斜杠规则是正确的方法,但是,我应该做一些不同的事情,还是使用带有斜杠的重定向“正确”的方式做事,尽管 Google 有时想为此而责备我。
【问题讨论】:
-
您是否将
statustext与您的cfheader一起发送?应该是这样的<cfheader statuscode="404" statustext="Not Found" />。这就是我的做法,它的工作原理(在 CF9 中)。 -
我补充说是的。我在 Firebug 中看到了标题。但是,当 URL 上没有 .cfm 时,即使 Firebug 将其视为 404,Google 也会将其视为 301。因此,当我不想要它们时,我会收到软 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。它的 Fetch as Google 认为domain.com/test/page/是 301,test/page.cfm是 404。我认为问题不在于 IIS。我将 .com 之后的所有内容都设为 query_string。 -
在您的 ColdFusion 管理员中,您是否可以选择打开或关闭
Enable HTTP Status Codes?
标签: iis iis-7 coldfusion http-status-code-404 coldfusion-10