通知用户301重定向

时间:2015-11-24 13:05:39

标签: php url redirect http-referer

考虑以下方案:

site A ------> site B (old URL)  --- 301 redirect ---> site C (new URL)

这是发生的事情

用户访问网站A.网站A包含指向网站B(旧网址)的链接。当用户单击指向站点B的链接时,他将被重定向到站点C(新URL)。站点B发布重定向到站点C。

问题

当用户最终到达站点C时,我想通知他重定向。

我尝试了什么

  • 我在网站C中处理传入请求时尝试查找HTTP_REFERER标头,但是引荐网址似乎指向网站A.我希望它引用网站B.我错过了相关的内容301重定向和这个特定标题的实现?我知道它是由浏览器设置的,可能会出现意外行为,但为什么不能指望它引用站点B(发出重定向的那个)?
  • 在发布重定向时,将?redirected=1查询字符串附加到新网址的末尾听起来像是一个解决方案,但它需要a)确保规范网址到位以避免重复内容和b)搞砸新内容我希望在地址栏内保持尽可能干净的网址;

总有一个选项可以显示具有预定义超时的中间重定向页面,直到Javascript或元刷新重定向执行魔术,但我想避免这种方法并在新网站中显示消息,以避免混淆两者用户和网络抓取工具,因为我读过浏览器内的重定向不如服务器重定向那么可靠。

解决这个问题的一般方法是什么?

更新:如何将网站B重定向到example.com/redirect.php?referrer_url=oldurl&redirect_to=newurl

然后redirect.php会将oldurl检测为引荐来源网址,将重定向消息刷新到会话并发送301重定向到example.com/newurl。从SEO的角度来看,这是一个好主意吗?

2 个答案:

答案 0 :(得分:1)

您可以使用重定向发送您自己的http-header,例如:

header('RedirectedFrom: www.something.com/ifoo/bar.html');

并在目标网站上使用此功能来识别重定向

$headers = headers_list();
foreach($headers as $header) {
    list($name,$value) = explode(':',$header);
    if($value == 'RedirectedFrom') {
        // what ever you want to do
        break;
    }
}

答案 1 :(得分:1)

我想出了以下问题的解决方案。

站点B(旧URL)被重定向到站点C的特定脚本,其作用是处理传入请求并在必要时执行重定向。

例如,如果用户浏览网站A并点击指向网站B的链接,则会将其重定向到网站C的redirect.php脚本,该脚本接受两个GET参数:referrer_urldestinationreferrer_url是指向网站B的旧链接,destination是网站C的相对路径。

然后,脚本确保destination不是绝对URL(以避免大量重定向到其他站点),将其附加到站点C的基本URL并将用户重定向到适当的页面。 referrer_url不是必需的,但可以用于检测旧网站B网址的域名(如果有多个不同的域名)。