почему мой заголовок ("Location: $ _SERVER ['HTTP_REFERER']");Функция PHP не работает? - PullRequest
5 голосов
/ 03 ноября 2011

Это работает, когда я ввожу

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

, но не работает, когда у меня

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

Я хочу перенаправить страницу на ту страницу, с которой она пришла.

Ответы [ 7 ]

6 голосов
/ 03 ноября 2011

Попробуйте :)* ps: это работает только для локальных страниц, вы не можете отслеживать другие сайты.

4 голосов
/ 03 ноября 2011

Вы можете попробовать:

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

У меня были проблемы с переменными выражениями, которые содержат кавычки в строках без фигурных скобок.

Вам также нужно искать $_SERVER['HTTP_REFERER'] просто нетбыть установленнымНекоторые пользовательские агенты не устанавливают его, некоторые приватные инструменты маскируют его, и вам нужно обрабатывать людей, приходящих на вашу страницу без реферера.

3 голосов
/ 03 ноября 2011

Вот простое решение. проверьте и посмотрите, что вам дает $ _server ['http_referer'], и если он установлен, вы можете перенаправить, а если нет, указать URL-адрес возврата:

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

header("Location: ".$url);
2 голосов
/ 03 ноября 2011

Это функция браузера, и любой вежливый браузер отправит правильный заголовок (хотя различные «средства безопасности» переопределяют его с помощью поддельного реферера).не каждая комбинация браузера / программного обеспечения безопасности отправит его на сервер.Вам лучше установить переменную сеанса при каждой загрузке страницы, чтобы определить, с какой страницы пришел пользователь (или что-то похожее с чуть большей логикой)

1 голос
/ 11 июня 2015
header("Location: $_SERVER[HTTP_REFERER]");

без одинарных кавычек. Это самый быстрый способ получить доступ и объединить значения массива без дополнительного кода объединения.

0 голосов
/ 28 ноября 2018

Одна из ошибок, которые иногда происходят, заключается в том, что НИКАКОГО ВЫХОДА не должно произойти до заголовка ('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: ' ....)
}

(для лучшего понимания, надеюсь, это поможет)

0 голосов
/ 14 ноября 2014

Просто вы можете использовать

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