Эта статья изначально была написана для блога Бенджамина Кроза.
Чтобы перенаправить пользователей на другую страницу в PHP, используйте функцию header().
Но если вы хотите понять, что вы делаете, нам нужно сначала узнать о HTTP.
Сначала основы: что такое HTTP?
Связь между браузером и сервером или наоборот происходит по протоколу HTTP. HTTP-сообщение состоит из заголовков и тела. Вот анатомия HTTP-запроса:
HTTP/<HTTP version> <HTTP code> <HTTP code description> Some-Header: Some value Some-Other-Header: Some other value Some data.
Это так просто.
Вот (упрощенный) ответ HTTP, который наш браузер получает, когда мы посещаем мой замечательный веб-сайт:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<title>My Awesome Website</title>
</head>
<body>
<h1>Welcome to my awesome website!</h1>
</body>
</html>
Да, вы смотрите на веб-страницу в ее самом сыром виде, ха-ха! 😅 Это то, что браузер получает, когда вы нажимаете любой URL.
Обратите внимание на первую строку. Вы можете прочитать 200 OK, что означает, что на веб-странице нет проблем и все работает отлично. Кодов много, и вы можете найти их в Википедии.
Что такое HTTP-сообщение для перенаправления?
Если вы попытаетесь перейти по URL-адресу https://www.benjamincrozat.com в своем веб-браузере, вы будете перенаправлены на https://benjamincrozat.com. Вот упрощенное HTTP-сообщение (я получил его с помощью HTTP-клиента):
HTTP/1.1 301 Moved Permanently Content-Type: text/html Location: https://benjamincrozat.com/ <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx/1.20.1</center> </body> </html>
Как видите, это довольно просто. Ключевым заголовком здесь является «Местоположение», которое нам нужно для указания URL-адреса, на который мы хотим перенаправить. В теле HTML не обязателен, но если ваш HTTP-клиент или веб-браузер не следуют перенаправлениям (да, они могут игнорировать их при правильных настройках), вы, по крайней мере, будете знать, что происходит.
В следующем разделе мы увидим, как создать наше HTTP-сообщение с помощью PHP и какой HTTP-код нам нужно использовать.
Используйте PHP для перенаправления пользователей
Использовать PHP для добавления заголовков к ответу HTTP, который будет отправлен в браузер, очень просто. Вот шаги, которые нам необходимо предпринять:
- Отправить заголовок;
- Остановите выполнение кода с помощью функции
exit()(иначе ваш пользователь будет перенаправлен после завершения выполнения кода);
Функцию добавления заголовков чертовски легко запомнить: header()
<?php
header('Location: https://example.com/some/page');
exit;
// This code will never be executed.
do_something();
// Text output should come after headers.
// This code won't be executed either.
echo 'Hello, World!';
В чем разница между редиректами 301 и 302?
По умолчанию добавление заголовка Местоположение приведет к переадресации 302 Moved Temporary. Но в большинстве случаев нам нужно перенаправление 301 Moved Permanently (наиболее распространенный вариант использования — для целей SEO). Начиная с PHP 5.4, мы можем использовать функцию http_response_code()ˋ:
<?php
http_response_code(301);
header('Location: https://example.com/some/page');
Кому или чему выгоден правильный HTTP-код?
- Пользователи, использующие созданный вами веб-API. Им нужно знать, когда что-то пошло правильно или неправильно, и стандартный способ сделать это — использовать правильные HTTP-коды (200 OK, 404 Not Found, 500 Server Error и т. д.);
- Бот Google пытается выяснить, что происходит на вашем сайте. Например, когда он видит HTTP-код «301 Moved Permanently», он знает, что ваша страница была перемещена в новое место и нуждается в обновлении в своем индексе.
Есть много других вариантов использования, которые я не буду здесь перечислять, но поверьте мне, когда я скажу вам, что это важно.