Сводка существующих ответов плюс два моих собственных цента:
1. Основной ответ
Вы можете использовать функцию header()
для отправки нового HTTP-заголовка, но его необходимо отправить в браузер перед любым HTML или текстом (например, перед объявлением <!DOCTYPE ...>
).
header('Location: '.$newURL);
2. Важные детали
die () или exit ()
header("Location: http://example.com/myOtherPage.php");
die();
Почему вы должны использовать die()
или exit()
: Daily WTF
Абсолютный или относительный URL
С июня 2014 года можно использовать как абсолютные, так и относительные URL. См. RFC 7231 , который заменил старый RFC 2616 , где разрешены только абсолютные URL.
Коды состояния
Заголовок PHP "Location" все еще использует прямой код HTTP 302 , но это не тот, который вы должны использовать. Вам следует рассмотреть либо 301 (постоянное перенаправление), либо 303 (другое).
Примечание: W3C упоминает , что заголовок 303 несовместим со "многими пользовательскими агентами до HTTP / 1.1. Все используемые в настоящее время браузеры являются пользовательскими агентами HTTP / 1.1. Это не так для многих других пользователей агенты, такие как пауки и роботы.
3. Документация
Заголовки HTTP и функция header()
в PHP
4. Альтернативы
Вы можете использовать альтернативный метод http_redirect($url);
, для которого требуется установить пакет PECL pecl .
5. Вспомогательные функции
Эта функция не включает код состояния 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();
}
6. Обход
Как уже упоминалось, header()
перенаправляет только работу, прежде чем что-либо записать. Обычно они терпят неудачу, если вызывается в середине HTML вывода. Тогда вы можете использовать обходной путь HTML-заголовка (не очень профессиональный!), Например:
<meta http-equiv="refresh" content="0;url=finalpage.html">
Или даже редирект JavaScript.
window.location.replace("http://example.com/");