От автора: редирект позволяет перенаправить браузер клиента на другой URL-адрес. Вы можете использовать его при переключении доменов, изменении структуры сайта или переходе на HTTPS. В этой статье я покажу вам, как выполнить редирект на другую страницу с помощью PHP. Я объясню, как именно PHP перенаправляет браузер, и покажу вам, что происходит под капотом.
Как работает базовый редирект?
Прежде чем мы углубимся в особенности редиректа с помощью PHP, давайте быстро разберемся, как именно работает редирект HTTP. Посмотрите на следующую диаграмму.
Давайте разберемся, что происходит на скриншоте выше:
Браузер клиента запрашивает определенную страницу с сервера. В приведенном выше примере клиент запросил содержимое файла index.php.
Сервер получает запрос файла index.php и хочет проинформировать клиента о том, что он больше не доступен или не перемещен куда-либо еще, и вместо этого ему следует искать новый файл: new_index.php. Сервер отправляет заголовок Location с новым URL-адресом вместе с кодом HTTP 301 или 302. Это HTTP-коды для редиректа.
Когда клиентский браузер обнаруживает код 301 или 302, он знает, что ему нужно инициировать другой запрос к новому URL-адресу для получения содержимого. Он инициирует запрос на извлечение файла new_index.php.
Наконец, сервер отправляет содержимое нового URL-адреса.
Вот как работает базовый редирект HTTP. В следующем разделе мы рассмотрим, как работает редирект PHP.
Как работает редирект в PHP
В PHP когда вы хотите перенаправить пользователя с одной страницы на другую, вам нужно использовать функцию header(). Эта функция позволяет отправлять необработанный HTTP-заголовок Location, который выполняет фактическое перенаправление, как мы рассмотрели в предыдущем разделе.
Как использовать функцию header
Давайте рассмотрим синтаксис функции header().
header( $header, $replace, $http_response_code )
$header: Это строка заголовка HTTP, которую вы хотите использовать. В нашем случае мы будем использовать для перенаправления заголовок Location.
$replace: Это необязательный параметр, который указывает, должен ли заголовок заменить предыдущий аналогичный заголовок.
$http_response_code: Позволяет отправить определенный код ответа.
Теперь давайте рассмотрим следующий пример, чтобы понять, как все это работает вместе.
<?php // index.php header("Location: https://www.yoursite.com/new_index.php"); exit(); ?>
Когда приведенный выше скрипт выполняется, он перенаправляет браузер клиента на http://www.yoursite.com/new_index.php. В фоновом режиме он отправляет необработанный HTTP-заголовок Location вместе с кодом состояния 302. Код состояния 302 используется для временного редиректа, но если вам нужен постоянный редирект, вы можете передать в третьем аргументе код 301, как показано в следующем фрагменте кода.
<?php // index.php header("Location: http://www.yoursite.com/new_index.php", TRUE, 301); exit(); ?>
Постоянный редирект 301 позволяет вам сообщить поисковым роботам, что страница больше не доступна, и ее можно заменить новой страницей.
Зачем использовать функцию Die() или Exit() после заголовка перенаправления?
Некоторые пользователи могли заметить, что я использовал в приведенном выше примере функцию exit(). На самом деле, обязательно использовать функцию exit() или die() сразу после заголовка перенаправления, чтобы остановить выполнение скрипта и избежать нежелательных результатов. Поэтому всегда рекомендуется использовать после перенаправления одну из этих функций.
Знаменитая ошибка: заголовки уже отправлены
Если вы опытный программист PHP, я уверен, что в какой-то момент в вашей повседневной разработки на PHP вы сталкивались с этой известной ошибкой. Однако для новичков возникновение этой ошибки действительно раздражает, поскольку ее действительно сложно отладить и исправить. В большинстве случаев они даже не подозревают, что это вызвано заголовком перенаправления.
Практическое правило заключается в том, что, когда вы используете в скрипте функцию header(), вы должны убедиться, что не отправляете перед ней какие-либо выходные данные. В противном случае PHP выдаст ошибку «headers are already sent». Это может произойти, даже если вы отправили перед использованием функции заголовка один пробел.
Заключение
В этом посте мы рассмотрели одну из важных функций PHP-программирования: редирект. Сначала мы описали основы редиректа HTTP, а затем я продемонстрировал, как это работает в PHP.
Автор: Sajal Soni
Источник: https://code.tutsplus.com
Редакция: Команда webformyself.