Установка переменной и использование header () - PullRequest
1 голос
/ 14 марта 2011

Я разрабатываю собственный сценарий управления контентом и работаю над перенаправлением страницы.

Приведенный ниже код сравнивает код URL с URL для определенного идентификатора страницы в базе данных, и еслидва URL не совпадают, пользователь перенаправлен.

Однако я хочу добавить переменную, чтобы мы могли проверить, была ли страница перенаправлена ​​или нет.Это не работает.

if (isset ( $_GET ['id'] ) && $rawdata) {
        if ($_SERVER ["REQUEST_URI"] != $rawdata ['htmltitle']) {
            header ( "HTTP/1.1 301 Moved Permanently" );
            header ( "Location: http://${_SERVER['SERVER_NAME']}:${_SERVER["SERVER_PORT"]}${rawdata['htmltitle']}" );
            $redirected = true;
            ;
        }
    }

if ($redirected == true) {
            print_redirect_nonexpected ();
        }

function print_redirect_nonexpected (){
echo "<!-- REDIRECTED _ NOT _ EXPECTED ? -->";
}

Функция не запускается, поэтому эхом нет.Есть идеи, что я тут делаю не так?

Ответы [ 3 ]

1 голос
/ 14 марта 2011

Когда вы отправляете заголовок Location:, пользовательский агент прекращает загрузку текущей страницы и загружает любую страницу, о которой вы сказали, что она загружается, так что вы никогда не увидите вывод.

Однако ваш код может * продолжать выполняться в фоновом режиме, поэтому обычно вы хотите следовать за header() с exit; для предотвращения нежелательного поведения.

* Зависит от конфигурации сервера и от ignore_user_abort.

Также достаточно header("Location: /{$rawdata['htmltitle']}");. Поскольку вы перенаправляете на тот же сервер, достаточно абсолютного пути. Не переусердствуйте в переадресации с помощью $_SERVER переменных.

1 голос
/ 14 марта 2011

Используйте это:

header ( "Location: http://".$_SERVER['SERVER_NAME'].$_SERVER['SERVER_PORT'].$rawdata['htmltitle']);

Если $ rawdata ['htmltitle'] является полным URL-адресом вашей страницы, используйте это:

header ( "Location: http://".$rawdata['htmltitle']);

А также добавление die() после header() - это хорошо.

0 голосов
/ 14 марта 2011

Как только заголовок Location будет отправлен, браузер прервет текущую операцию и загрузит страницу в перенаправленном местоположении. Это означает, что для всех намерений и целей местоположение ('header: example.com') будет по существу иметь тот же эффект, что и die (). Вы можете переопределить это поведение, используя буферизацию вывода, или вы можете переместить вызовы header () вниз в вашем скрипте. Однако вы не можете переместить их после вызова print_redirect_unexpected, поскольку отправка любого вывода в браузер также приведет к отправке всех заголовков, и вы больше не сможете отправлять.

Итак, в основном вам нужно включить буферизацию вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...