4

所以......我们有一个定制的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 正确处理。网站管理员工具对我很生气,因为我在此之前提供了“Soft 404s”,所以我正在尝试解决这个问题。

我也尝试过设置<httpErrors existingResponse="PassThrough" />任何该死的东西,但也没有用。我一直在寻找其他线程试图弄清楚这一点,但不能。

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

我测试了一个事实,即如果我将 .cfm 添加到 URL,它会像 Google 一样获取 404。但是如果没有 .cfm,它会认为它是 301。Firebug 将两者都视为 404。这似乎是 Google 的问题。

答案种类:

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

4

1 回答 1

0

我不完全确定我是否遵循您的方法的具体细节,所以我将给您一些您需要查看的内容,以便让这种方法运作良好(或至少对我最有效的方法)。

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

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

这确实会导致此类操作出错,因为这意味着如果文件不存在,IIS 将不会调用 ColdFusion。如果您的 404 设置正确,这应该不是问题,但仍然需要调查。

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

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

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

于 2013-01-29T15:45:23.393 回答