【问题标题】:404 Header redirect query404 标头重定向查询
【发布时间】:2011-12-08 17:19:36
【问题描述】:

在标准 LAMP 应用程序中,我使用 .htaccess 规则将人们发送到我的 404 页面,如下所示:

ErrorDocument 404 http://www.mydomain.com/404.php

我们使用从文件系统读取文件的 php 文件来提供动态图像,但我刚刚注意到,当从应用程序中删除图像时,我们并没有拾取它,因此请求 http://www.mydomain.com/image_4.jg(对于例如)使用 mod_rewrite 调用 image.php 不会将用户重定向到 404 页面,因为动态图像文件将始终存在。在这种情况下,我知道我应该使用 404,但我不确定在哪里。

显然我知道当图像已被删除时我需要手动插入一个标头重定向到 404.php 页面,但我是否应该使用此重定向发送一个 404 标头?查看代码,我们的 404.php 页面实际上已经发送了一个带有 ("HTTP/1.1 404 Not Found"); 的 404 标头,这是我们的 SEO 团队几年前所指示的,不确定这是否正确?这对我来说似乎违反直觉,因为它几乎暗示 404 页面本身尚未找到。

我猜这是两个问题:

  • 当图像不是时,我是否应该在重定向中发送 404 标头 找到了吗?
  • 我的 404 页面是否真的应该发送 404 标头?

编辑

实际上似乎不可能同时发送 404 和重定向,例如这会导致 Chrome 显示“糟糕!此链接似乎已损坏”。留言

header( "Location: /404.php", true, 404 );

如果你像这样分解标题,它也不会按预期工作

header("HTTP/1.1 404 Not Found");
header("Location: /404.php" );

在这种情况下,如果您查看标头,它会发送一个 302,然后是一个 404。在这种情况下,可能只发送一个没有重定向的标头就足够了吗?也许只是按照某些人的建议发送 410?

【问题讨论】:

    标签: php seo http-headers http-status-code-404 http-status-code-410


    【解决方案1】:

    404 未找到

    服务器没有找到任何匹配 Request-URI 的东西。不 指示该状况是暂时的还是 永恒的。如果服务器应该使用 410 (Gone) 状态码 通过一些内部可配置的机制知道,旧的 资源永久不可用且没有转发地址。 当服务器不希望这样做时,通常使用此状态码 准确说明请求被拒绝的原因,或者当没有其他请求时 响应是适用的。

    ——Status Code Definitions

    当找不到资源时,应将 404 响应发送回客户端。

    当图像不是时,我是否应该在重定向中发送 404 标头 找到了吗?

    是的。这告诉请求动态图像的客户端找不到资源。如果您知道资源永远不会返回,请改用 410 (Gone)。

    我的 404 页面真的应该发送 404 标头吗?

    是的。见404 Error Pages and Redirects for SEOs

    更新

    header("HTTP/1.0 404 Not Found"); 应该足够了;但是,如果内容长度小于 512 字节,Google Chrome 将无法显示自定义 404 页面。

    【讨论】:

      【解决方案2】:

      简单地说:是的,两个问题。

      从 image.php 发送的 404 标头不会将您重定向到 .htaccess 中指定的 404 错误文档,因此当找不到图像时,您必须手动重定向到 404.php。首选方式是 410(已消失),特别是因为您知道所请求的资源已被删除且不会返回,因此搜索引擎可以删除该链接。

      至于第二个是的:应该,尽管 Apache 已经为您做到了。

      【讨论】:

        【解决方案3】:
        1. 我不知道我是否会重定向,我宁愿包括你的404.php
        2. 没错。默认错误页面也存在并发送 404。

        【讨论】:

          【解决方案4】:

          使用ErrorDocument 指令定义的错误文档仅在网络服务器识别出请求无法映射到现有文件时提供。但是当您使用 mod_rewrite 将它们映射到现有的 image.php 上时,它们显然是被发现的。因此,从 Web 服务器的角度来看,可以满足初始请求。

          此时,特定请求是否无法满足并在稍后导致 404 并不重要。在这种情况下,image.php 需要以正确的错误响应进行响应。

          如果找不到图像,我应该在重定向中发送 404 标头吗?

          您只能发送一个响应状态码。因此,您可以发送错误响应 (4xx) 或重定向响应 (3xx)。在您的情况下,将绝对 URL 作为文档 URL 将产生重定向状态代码(即 302)而不是原始 404。

          我的 404 页面真的应该发送 404 标头吗?

          是的,当然。这就是状态码的意义所在。

          并且还提供有关该错误文档的一些有用信息。没有什么比无意义的错误文档更糟糕的了。

          【讨论】:

          • 在我看来,410 已消失的响应以及资源已被删除的简单文本描述对于这种情况来说已经足够了
          • @seengee 如果请求的资源实际上已经消失(即请求的资源在某个时候已经存在),那么,是的,发送 410。但是如果请求的资源之前不存在,或者您可以' 不告诉你,你只能告诉它当前不存在,然后发送 404。
          【解决方案5】:
          header("HTTP/1.0 404 Not Found");
          

          你可能想要包含 404 页面,只发送标题会给你一个空白页面

          header("HTTP/1.0 404 Not Found");
          include_once("404.html");
          exit();
          

          【讨论】:

            【解决方案6】:
            header("HTTP/1.1 404 Not Found");
            header("Refresh: 0; url=/404.php");
            

            【讨论】:

            • 除非有正文内容,否则 Chrome 不服从。
            猜你喜欢
            • 1970-01-01
            • 2012-04-23
            • 1970-01-01
            • 1970-01-01
            • 2016-07-03
            • 2016-01-03
            • 2012-09-09
            • 1970-01-01
            • 2015-10-16
            相关资源
            最近更新 更多