代码之家  ›  专栏  ›  技术社区  ›  KJW

为什么$_server['http_referer']仍显示原始引用?

php
  •  0
  • KJW  · 技术社区  · 14 年前

    我想欺骗裁判。

    a.com-->b.com-->destination.com

    我有

    header("Location: http://B.com/redirect.php?site='http://destination.com'");
    

    我有

    $target = $_GET['site'];
    header("Location: $target");
    

    destination.com写入 $_SERVER['HTTP_REFERER']; 到一个数据库,在那里我可以确认引用是否有效。

    但是,数据库显示referer是a.com而不是b.com!我哪里出错了?

    3 回复  |  直到 14 年前
        1
  •  5
  •   Powerlord    14 年前

    位置头是重定向的。你告诉浏览器“你想要的东西不在这里,去看看那里吧。”

    因此,浏览器很乐意向新的URL提交相同的请求。

    当然,作为相同的请求,发送的引用者是不变的。

        2
  •  0
  •   Nathaniel    14 年前

    尝试没有 然后给你的手机编码:)

        3
  •  0
  •   bobince    14 年前

    如果不希望引用者通过,请不要使用真正的HTTP重定向。还有一些其他的方法通常不如适当的重定向,但如果您担心避免引用泄漏,并且不太担心可用性或SEO,则可能有用。

    • javascript重定向: location.replace('someurl'); .

    这会将b.com上的重定向页作为除IE以外的所有浏览器上的引用传递。

    • 元重定向: <meta http-equiv="Refresh" content="0;url=someurl" /> . 引用将是Opera上的重定向页

    这会在Opera、Safari和Chrome上设置对b.com的引用,而不是IE或Firefox。

    • 一种指向 action="someurl" ,使用javascript自动提交。这将添加一个空 ? 不过,查询到该URL后,它会以非常令人讨厌的方式在不缓存该URL的浏览器中断开后退按钮。

    这总是将引用设置为b.com。

    • 请记住在页面中提供一个链接(如果您想通过引用者)或一个纯文本副本和通心粉版本(如果您不想)作为可访问性的备份。