404标头重定向查询

时间:2011-10-16 12:55:33

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

在标准的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页面本身还没有找到。

我想这是2个问题:

  • 当图像不是时,我应该在重定向中发送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?

6 个答案:

答案 0 :(得分:3)

404 Not Found

  

服务器未找到与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页面。

答案 1 :(得分:2)

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

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

至于第二个是:它应该,尽管Apache已经为你做了。

答案 2 :(得分:2)

仅当Web服务器识别出请求无法映射到现有文件时,才会使用ErrorDocument指令定义的错误文档。但是当你使用mod_rewrite将它们映射到现有的 image.php 时,很明显它们就可以了。因此,从Web服务器的角度来看,可以完成初始请求。

此时,如果无法满足特定请求并且稍后导致404无关紧要。在这种情况下, image.php 需要以适当的错误响应进行响应。

  

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

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

  

我的404页面实际上应该发送404标头吗?

是的,当然。这就是状态代码的含义。

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

答案 3 :(得分:1)

  1. 我不知道我是否会重定向,我宁愿包含你的404.php
  2. 这是对的。默认错误页面也存在并发送404。

答案 4 :(得分:1)

header("HTTP/1.0 404 Not Found");

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

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

答案 5 :(得分:1)

header("HTTP/1.1 404 Not Found");
header("Refresh: 0; url=/404.php");