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 использует в следующих случаях:
- Вы продвигаете новый продукт, и хотите временно перенаправлять на него своих посетителей в течении ограниченного периода времени. Сохраняя при этом рейтинг своей страницы в поисковых системах и/или её позицию в поисковой выдаче.
- Товар распродан и вам нужно временно переправить пользователей на страницу с другим товаром.
- A/B тестирование. Вы хотите временно перенаправлять посетителей на другую страницу не влияя на поисковый рейтинг текущей станицы.
Однако следует заметить, что редирект 302 используется если метод запроса был GET
или HEAD
или вам неважно содержимое и заголовок запроса. В иных случаях следует использовать редирект 307 (например для запроса PUT
), заголовок и содержимое будут в не изменённом виде переданы по новому адресу указанному в поле Location
.
Если требуется изменить метод запроса на GET
— используйте редирект 303. Это бывает полезно если был запрос с методом PUT
и вы хотите подтвердить выполненное действие.
Для чего используется редирект 301?
HTTP код 301 означает, что запрошенная страница была окончательно перенесена на новый адрес указанный в поле Location
заголовка страницы.
Некоторые варианты использования редиректа 301:
- Принудительное перенаправление с HTTP на HTTPS.
- Перенаправление со старых URL-адресов на новые (если мы не хотим, чтобы люди натыкались на мёртвые ссылки). Полезно при переходе на новый домен.
Что лучше редирект 302 или 301?
Ни один из них не лучше или хуже другого. Используйте тот, который подходит в вашей ситуации. Эта статья должна помочь разобраться.