【问题标题】:Return 404 if non existant page # PHP如果页面不存在则返回 404 # PHP
【发布时间】:2011-04-24 21:52:29
【问题描述】:

我有一个动态评论系统,每页显示 30 条评论,当达到 30 条评论时,它会被分页。所以我有诸如

之类的页面

/reviews/city/波士顿/

/reviews/city/Boston/Page/2/

/reviews/city/Boston/Page/3/

等等等等

不幸的是,谷歌似乎正在通过看似推理的方式来索引页面 - 例如

/reviews/city/Boston/Page/65/

此页面绝对不存在,我想通知 Google。目前它显示一个评论页面,但没有评论。我无法想象这对搜索引擎优化非常好。所以,如果首先检查我的 MySQL 查询的结果数,如果没有结果返回 404 并将它们转发到主页或其他页面,我想做什么。

目前,这就是我所拥有的。

if (!$validRevQuery) {
    header("HTTP/1.0 404 Not Found");
    header("Location: /index.php");
    exit;
}

我走对了吗?

【问题讨论】:

  • 我不会放404然后重定向,这有点矛盾,只是做一个像样的404页面
  • 如果你想要一个 404 并且只有搜索引擎点击该查询,那么为什么不直接重定向到一个不存在的页面并让服务器处理其余的?如果用户点击它不是很干净,但只需要 1 行代码:-)
  • 不一定。您正在使用任何类型关闭检查机制吗?

标签: php mysql apache http-headers http-status-code-404


【解决方案1】:

重定向是一个状态码,就像 404 一样。你不能有两个状态码。

您需要输出 404 状态,同时显示响应正文(=错误页面)。

if (!$validRevQuery) {
    header("HTTP/1.0 404 Not Found");
    .... output full HTML structure here .....
    exit;
}

【讨论】:

    【解决方案2】:

    您不能同时发送 404 状态代码并进行重定向(通常是 3xx status code)。您只能执行其中一项:发送 404 状态代码和错误文档以重定向响应。

    【讨论】:

      【解决方案3】:

      正如 Pekka 建议的那样,最好的选择是设置 404 状态,然后将 404 页面代码放在后面。 如果您只是 301(重定向)页面,这对 SEO 来说是不好的做法,因为这样搜索引擎将继续访问该页面以查看重定向是否仍然存在。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-26
        • 2023-04-08
        • 2021-10-27
        • 2013-08-28
        • 2020-05-12
        • 1970-01-01
        • 2011-11-22
        • 2011-02-28
        相关资源
        最近更新 更多