【问题标题】:How to detect 301 redirect using php [duplicate]如何使用php检测301重定向[重复]
【发布时间】:2012-11-26 16:51:11
【问题描述】:

可能重复:
How to identify if referrer is a 301 redirect

我使用 htaccess 进行 301 重定向将旧 url 重定向到新 url,问题是 url 包含存储在 db 中的 id。但是我有一个带有新 id 的新数据库,所以现在当旧 url 重定向到新 url 时,页面上会加载不同的记录。所以我所做的就是将旧 id 与新 id 一起存储,这样我就知道旧 id 属于新 id。但是,我怎样才能检测到有人试图访问旧网址? php中有没有办法检测到页面的人是通过301重定向的?由于 SEO 原因,我不想在 url 中添加任何新内容,所以我真的需要知道我是否可以检测到他们是否通过 301 重定向来到此页面。希望这是有道理的。

【问题讨论】:

  • 您可以使用 $_SERVER['HTTP_REFERER'];但这并不可靠
  • @FlorianKasper:即使设置了HTTP_REFERER,它也会指向点击链接的页面,而不是发送301的脚本。301就是这种情况。

标签: php .htaccess seo http-status-code-301


【解决方案1】:

脚本不会知道某些东西是否被重定向到它。不要重定向到,比如index.php?id=12345,而是添加一个中间重定向,您可以在其中确定正确的 URL。

首先,使用临时变量名在您的 .htaccess 中重定向,例如index.php?oldid=12345 然后在该脚本中执行:

if (isset($_POST['oldid'])) {
    $id = fetch_new_id();
    header("Location: index.php?id=$id");
}

【讨论】:

  • 这对 SEO 和通过 301 重定向两次传递“果汁”有何影响?因为我需要在您的建议中进行 2 301 次重定向。
  • 额外的 301 重定向根本不会影响您的 SEO。
【解决方案2】:

我认为您无法检测到已设置的 http 状态,但使用 .htaccess 您可以将其他变量添加到重定向的 url 或将 id 重命名为另一个变量名。

【讨论】:

    【解决方案3】:

    向重定向添加另一个参数,例如redirect=true,检查参数以让您的应用知道它是重定向,启动会话,然后再次重定向到最终的未更改的 url,比较会话即可知道,用户来自重定向的 url。

    或者照 Salman 所说的,使用规范的 url。

    【讨论】:

    • 正如我在原始笔记中提到的那样,由于 SEO 原因,我不能。
    • 这就是你再次重定向的原因!出于 SEO 的原因,最终 url 将没有额外的参数,但您的应用会知道。
    • 您可以通过<link rel=canonical> 告诉搜索引擎您的规范网址。使用它告诉搜索引擎?redirect=true 可以忽略。
    • 这次会议的意义何在?除此之外,这与我的答案完全相同。
    • 会话的重点是将有关重定向的知识实际转移到应用程序中。否则,它只是另一个重定向,可以来自任何人。
    【解决方案4】:

    为什么不通过php处理所有旧的URL加上重写,让代码直接301重定向到带有新id的新URL?

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 2011-02-22
      • 2011-06-06
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 2014-05-27
      相关资源
      最近更新 更多