我输入
时有效header("Location: http://www.google.com");
但是当我有
时它不起作用header("Location: $_SERVER['HTTP_REFERER']");
我想将页面重定向到它来自的任何页面。
答案 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: ' ....)
}
(为使您更好地理解,希望对您有所帮助)