【问题标题】:PHP 301 Redirect - collect referrerPHP 301 重定向 - 收集引荐来源网址
【发布时间】:2011-04-10 06:04:51
【问题描述】:

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

$_SERVER['HTTP_REFERER']

如果我做一个指向页面的链接

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

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

我是否需要与重定向页面一起发送另一个标题?

感谢您的建议!

【问题讨论】:

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


    【解决方案1】:

    您可以使用 javascript 来实现。使用以下脚本,但它在

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

    这当然不会产生正确的 HTTP 301 redir,但我只是对其进行了测试,它会发送引荐来源网址(引荐来源网址为 site-a)。

    【讨论】:

      【解决方案2】:

      问题是,HTTP_REFERER 是站点 A。这就是 301 的工作原理。

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

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

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

      但是...如果您希望避免使用 _GET 变量,您有几个选择。

      A) 收集_GET 请求,然后重新调整 URL -- IE 将站点 B 重定向到其自身的“干净”版本。

      B) 在发出header() 之前,让您的重定向页面将curlstream_get_contents 转到“收集”页面,您可以在其中收集和存储任何会话信息(像引用者一样)并准备好在重定向时对其进行处理。

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 原发帖者说他想不惜一切代价避免查询字符串,所以我认为这不会是他们所追求的
        • 是的,查询字符串不是一个真正的选择,不过感谢您的建议。
        猜你喜欢
        • 2011-10-19
        • 2010-11-26
        • 2010-12-30
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多