2011-11-03 41 views
5

它,当我输入

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

,但它并没有当我有

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

我想重定向的页面,它是从哪里来的任何页面时才起作用。

+7

并不是所有的浏览器都会发送一个引用者,有些引擎会发送伪造的数据。同样,你不能在像这样的双引号字符串中的数组键上使用引号。尝试'header(“Location:{$ _SERVER ['HTTP_REFERER']}”);'而不是。 –

+1

您是否检查过$ _SERVER ['HTTP_REFERER']'的内容? – PeeHaa

+0

这个字符串的输出是什么: echo“Location:$ _SERVER ['HTTP_REFERER']”; ? –

回答

5

试试::)

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:这只适用于本地网页,您无法追踪其他网站。

2

这是一个浏览器的功能,任何浏览器有礼貌将发送 正确的标题(尽管各种“安全”的工具将覆盖此 用假引荐)。

这是浏览器特定的,所以不是每个浏览器/安全软件组合都会将它发送到服务器。你关上的每个页面加载设置一个会话变量来确定用户是从哪个页面(或者多一点的逻辑类似的东西)

+0

那么在每个页面上创建一个当前网址的会话? –

4

你可以尝试更好:

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

我有变量表达式中包含带括号的字符串中的引号的问题。

您还需要注意不要设置$_SERVER['HTTP_REFERER']。一些用户代理不设置它,一些私有工具掩盖它,并且您需要处理在没有引用者的情况下进入您的页面的人员。

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); 
0

只要您可以使用

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

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

相关问题