Как выполнить редирект с помощью PHP

Как выполнить редирект с помощью PHP

От автора: редирект позволяет перенаправить браузер клиента на другой 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.