【问题标题】:Can't get IIS 7/Coldfusion to deliver 404无法让 IIS 7/Coldfusion 提供 404
【发布时间】: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


【解决方案1】:

我不完全确定我是否遵循了您的方法的具体细节,因此我将向您提供一些您需要查看的内容,以使这种方法运作良好(或至少对我最有效的方法) .

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

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

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

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

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

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

【讨论】:

  • 所有页面请求都按原样发送到 index.cfm。我的网站上没有“页面”。我在根之后获取所有 URL,在我的数据库中搜索匹配的页面并显示该页面(如果存在)。如果没有,我必须显示 404 页面。 IIS 不会处理我的 404,因为没有物理页面文件。
猜你喜欢
  • 2012-04-17
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多