PHP 301 Redirect - 收集推荐人

时间:2010-09-09 12:53:49

标签: php redirect http-status-code-301

我在网站A上进行301重定向到网站B - 当用户到达网站B时,它需要找到用户来自的网页。这似乎不起作用:

$_SERVER['HTTP_REFERER']

而如果我链接到页面

<a href="http://site-b.com">go</a>

我通过推荐人。有没有理由在重定向后没有通过?如果是这样,任何人都可以就如何做到这一点提出任何建议我想不惜一切代价避免在重定向上使用查询字符串。

是否可能需要使用重定向的页面发送另一个标头?

感谢您的任何建议!

3 个答案:

答案 0 :(得分:3)

问题是,HTTP_REFERER是网站A.这就是301的工作方式。

也就是说,执行此操作的简单方法是将引荐来源的网址作为变量引用到网站B的网址末尾。然后,在站点B,只要您从站点A获得推荐,就可以拥有它。

<?php
    header("Location: http://site-b.com/?ref="
            .urlencode($_SERVER['HTTP_REFERER']),TRUE,301);
?>

然后当然在网站B,访问urldecode($_GET['ref'])为您的推荐人。

但是......如果你想避免使用_GET个变量,你可以选择几个。

A)收集_GET请求,然后重新获取网址 - IE将网站B重定向到自己的“干净”版本。

B)让您的重定向页面在发出curl之前将stream_get_contentsheader()转到“收藏”页面,存储任何会话信息(如引用者)并准备好在重定向时进行处理。

答案 1 :(得分:0)

您可以尝试在执行重定向时将CGI查询字符串添加到URL的末尾 - 例如

http://www.site-b.com?redirectfrom=www.site-a.com

site-b.com会忽略URL参数,但它会记录在日志中,并且可以在PHP中访问。

答案 2 :(得分:-1)

你可以用javascript做到这一点。使用以下脚本,但它在&lt; head&gt;之间。和&lt; / head&gt;

<script type="text/javascript">
location.href='http://www.site-b.com';
</script>

这当然不会制作正确的HTTP 301 redir,但我只是测试了它,它会发送引用者(引用者是site-a)。