为什么是我的标题(“位置:$ _SERVER ['HTTP_REFERER']”); PHP功能不起作用?

时间:2011-11-03 19:02:25

标签: php url redirect http-referer

我输入

时有效
header("Location: http://www.google.com");

但是当我有

时它不起作用
header("Location: $_SERVER['HTTP_REFERER']");

我想将页面重定向到它来自的任何页面。

7 个答案:

答案 0 :(得分:6)

试一试::))

if (!empty($_SERVER['HTTP_REFERER']))
    header("Location: ".$_SERVER['HTTP_REFERER']);
else
   echo "No referrer.";

但是,为了确定哪个页面用户来自,我宁愿使用会话变量,它会在每个页面重置:

session_start();
echo "Previous page:", $_SESSION['loc'];
$_SESSION['loc']=$_SERVER['PHP_SELF'];

ps:这仅适用于本地网页,您无法跟踪其他网站。

答案 1 :(得分:4)

您可以尝试:

header("Location: {$_SERVER['HTTP_REFERER']}");

我遇到了变量表达式的问题,这些表达式在没有大括号的字符串中包含引号。

您还需要注意$_SERVER['HTTP_REFERER']根本没有被设置。一些用户代理没有设置它,一些私有工具会掩盖它,你需要处理没有推荐人的人来到你的页面。

答案 2 :(得分:3)

这是一个简单的解决方案。 检查并查看$ _server ['http_referer']给你的是什么,如果它的设置然后你可以重定向,如果没有放回一个类似的地址:

if(isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != ""){
$url = $_SERVER['HTTP_REFERER'];
}else{
$url = "YOUR INDEX PAGE OR SOMETHING";
}

header("Location: ".$url);

答案 3 :(得分:2)

  

这是一个浏览器功能,任何有礼貌的浏览器都会发送   正确的标题(虽然各种'安全'工具将覆盖此   与假的referer)。

它是特定于浏览器的,因此并非每个浏览器/安全软件组合都会将其发送到服务器。你最好在每个页面加载时设置一个会话变量,以确定用户来自哪个页面(或类似的逻辑更多)

答案 4 :(得分:1)

header("Location: $_SERVER[HTTP_REFERER]");

没有单引号。这是访问和连接数组值的最快方法,无需额外的连接代码。

答案 5 :(得分:0)

只需使用

即可
if(isset($_SERVER['HTTP_REFERER'])){
    header("Location:".$_SERVER['HTTP_REFERER']."");
}

答案 6 :(得分:0)

有时会犯的一个错误是,在标头('Location:'....)之前必须没有输出

这不起作用(显示输出,但不重定向):

if (isset($_SERVER['HTTP_REFERER'])) {
    $referer = $_SERVER['HTTP_REFERER'];
    $cleaned_url = preg_replace('/[^a-z ]+/i', '', strtolower($referer));
    $pattern = '/troester/';
    $res = preg_match($pattern, $cleaned_url);
    echo $res; // <--- OUTPUT COMES HERE
    if ($res == true) header("Location: {$referer}");
}

这有效(可以正确重定向):

if (isset($_SERVER['HTTP_REFERER'])) {
    $referer = $_SERVER['HTTP_REFERER'];
    $cleaned_url = preg_replace('/[^a-z ]+/i', '', strtolower($referer));
    $pattern = '/troester/';
    $res = preg_match($pattern, $cleaned_url);
    //echo $res; // <--- NO OUTPUT COMES HERE
    if ($res == true) header("Location: {$referer}");
}

这也可以,但没有任何意义():

if (isset($_SERVER['HTTP_REFERER'])) {
    $referer = $_SERVER['HTTP_REFERER'];
    $cleaned_url = preg_replace('/[^a-z ]+/i', '', strtolower($referer));
    $pattern = '/troester/';
    $res = preg_match($pattern, $cleaned_url);
    if ($res == true) header("Location: {$referer}");
    echo $res; // <--- OUTPUT COMES HERE, AFTER header('Location: ' ....)
}

(为使您更好地理解,希望对您有所帮助)