Резюме существующих ответов плюс два моих собственных цента:
Вы можете использовать функцию header()
для отправки нового HTTP-заголовка, но его необходимо отправить в браузер перед любым HTML или текстом (например, перед объявлением ).
header('Location: '.$newURL);
die () или exit ()
header("Location: http://example.com/myOtherPage.php");
die();
Почему вы должны использовать die()
или exit()
: Ежедневный WTF
Абсолютный или относительный URL
С июня 2014 года можно использовать как абсолютные, так и относительные URL. См. RFC 7231 , который заменил старый RFC 2616 , где допускались только абсолютные URL.
Коды состояния
Заголовок PHP «Location» все еще использует код HTTP 302 , но вы не должны его использовать. Вам следует рассмотреть либо 301 (постоянное перенаправление), либо 303 (другое).
Примечание: W3C упоминает , что заголовок 303 несовместим со «многими пользовательскими агентами до HTTP / 1.1. В настоящее время все используемые браузеры являются пользовательскими агентами HTTP / 1.1. Это не так для многих других пользователей. агенты, такие как пауки и роботы.
HTTP-заголовки и функция header()
в PHP
Вы можете использовать альтернативный метод http_redirect($url);
, для которого требуется установить пакет PECL pecl .
Эта функция не включает 303 код состояния:
function Redirect($url, $permanent = false)
{
header('Location: ' . $url, true, $permanent ? 301 : 302);
exit();
}
Redirect('http://example.com/', false);
Это более гибко:
function redirect($url, $statusCode = 303)
{
header('Location: ' . $url, true, $statusCode);
die();
}
Как уже упоминалось header()
перенаправляет только работу, прежде чем что-либо записывается. Они обычно терпит неудачу, если вызывается в середине HTML-вывода . Тогда вы можете использовать обходной путь заголовка HTML (не очень профессиональный! ) вроде:
Или даже редирект JavaScript.
window.location.replace("http://example.com/");
Да, это правильно. Значения атрибутов ограничены константами следующих типов
Ссылка: http://msdn.microsoft.com/en-us/library/aa288454 (VS.71) .aspx