PHP: Редирект 301 и 302

Редиректы или перенаправления в PHP это просто. Мы рассмотрим их шаг за шагом и я покажу, как избежать некоторых ловушек. Мы узнаем нюансы между 301 и 302 перенаправлением.

Для перенаправления на другую страницу с кодом 302 используйте функцию PHP header().

header('Location: https://example.com/path/to/page');

Довольно просто, верно? Однако есть нюансы о которых следует помнить.

Не выводите текст перед отправкой заголовков

Следующий PHP код вызовет предупреждение:

<?php

echo 'Hello, World!';

header('Location: https://example.com/some/page');
Warning: Cannot modify header information - headers already sent by

Остановите выполнение кода

В большинстве случаев после отправки заголовка header() вам нужно будет остановить выполнение кода с помощью PHP функции exit():

<?php

if (! empty($_POST['redirect'])) {
header('Location: https://example.com/some/page');

exit;
}

// После отправки заголовка выполнение кода будет остановлено благодаря exit()

Если вы не остановите выполнение кода, пользователь будет перенаправлен на новый URL-адрес только после завершения выполнения кода.

Устанавливайте корректный HTTP код

Функция header() может принимать параметры. Например, когда вы добавляете заголовок Location, будет автоматически установлен HTTP код 302. Но если мы хотим выполнить перенаправление на новый URL с кодом 301?

header('Location: https://example.com/some/page', true, 301);

Часто задаваемые вопросы

Это должен быть редирект 302 или редирект 301?

В большинстве случаев вам следует придерживаться редиректа 302 выполняемого по умолчанию, если только не хотите постоянно перенаправлять своих пользователей.

Редирект 302 постоянный?

Редирект 302 временный — не постоянный.

Для чего используется редирект 302?

HTTP код 302 означает, что запрошенная страница была временна перемещена по другому адресу, указанному в поле Location заголовка страницы.

Редирект 302 использует в следующих случаях:

Однако следует заметить, что редирект 302 используется если метод запроса был GET или HEAD или вам неважно содержимое и заголовок запроса. В иных случаях следует использовать редирект 307 (например для запроса PUT), заголовок и содержимое будут в не изменённом виде переданы по новому адресу указанному в поле Location.

Если требуется изменить метод запроса на GET — используйте редирект 303. Это бывает полезно если был запрос с методом PUT и вы хотите подтвердить выполненное действие.

Для чего используется редирект 301?

HTTP код 301 означает, что запрошенная страница была окончательно перенесена на новый адрес указанный в поле Location заголовка страницы.

Некоторые варианты использования редиректа 301:

Что лучше редирект 302 или 301?

Ни один из них не лучше или хуже другого. Используйте тот, который подходит в вашей ситуации. Эта статья должна помочь разобраться.

Дополнительные материалы

Предыдущая Статья

Laravel: Эффективный Eloquent

Следующая Статья

CSS: em и rem — всё, что нужно знать