Как сделать редирект на php?
Послать каждый может. А вот правильно перенаправить – это целое искусство. Но еще труднее дается перенаправление пользователей на нужный путь в интернете. Для этого лучше всего подходит редирект на php.
Что за редирект?
В веб-программировании возникают ситуации, когда нужно перенаправить пользователя, переходящего по ссылке, на другой адрес. Конечно, на первый взгляд реализация такого перенаправления выглядит немного «незаконной». На практике же, такой редирект востребован не только среди злоумышленников, но и среди честных вебмастеров:

В каких случаях может потребоваться редирект:
- Когда происходит замена движка сайта – в результате этого меняется архитектура всего ресурса. После чего возникает проблема, как сделать редирект;
- При перекройке структуры ресурса – происходит добавление, удаление или перенос целых разделов или одного материала. Пока происходит этот процесс, временно можно организовать перенаправление пользователя на нужный раздел;
- Если сайт недавно сменил свое доменное имя – после смены имени домена старое еще некоторое время будет фигурировать в поисковой выдаче. В этом случае редирект пользователя на новый домен будет реализован поисковой системой автоматически;
- В процессе авторизации – как правило, на большом сайте есть две группы пользователей: обычные посетители и администраторы ресурса. В таком случае имеет смысл реализовать редирект каждого пользователя согласно его правам и роли. После авторизации администратор или модераторы сайта попадают в административную часть ресурса, а посетители – на пользовательскую часть ресурса.
Особенности редиректа на php
В отличие от других языков php обладает некоторыми преимуществами в реализации редиректа:
- Php является серверным языком программирования. Поэтому перенаправление будет происходить не в html коде страниц, отображаемых в браузере, а в скрипте, размещенном на сервере;
- Редирект на php может быть реализован несколькими способами. Что во многом расширяет его применение;
- Благодаря обработке данных на сервере перенаправление, реализованное с помощью php, менее восприимчиво к действию фильтров поисковых систем.
Для редиректа в php используется функция header(). Она применяется для отправки заголовка http. Ее синтаксис:
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
Принимаемые функцией аргументы:
string $string – строка заголовка;

- bool $replace – является необязательным атрибутом типа bool. Отвечает за переопределение предыдущего заголовка. Если будет задано true, то предыдущий заголовок или заголовки одного типа будут заменены. Если в аргументе задано false, то перезапись заголовка не состоится. По умолчанию, задано значение true;
- http_response_code – аргумент принудительно устанавливает код ответа HTTP. Установка кода пройдет успешно при условии, что аргумент string не будет пустым.
При использовании функции header() для редиректа внешних ссылок большое значение имеет место расположения ее вызова. В коде он должен находиться выше всех тегов html:

Применение редиректа header()
Для демонстрации действия функции на локальном сервере нужно создать два файла. Один из них назовем redirect.php, а другой redirect2.php. Внутри первого разместим вызов функции в следующем формате:
<?php
header('Location: http://localhost/ redirect2.php ');
?>
В другом файле помещаем строку:
echo "Привет! Вы находитесь в файле redirect2.php";

Еще несколько практических примеров использования редиректа на php:
- Принудительная передача кода состояния http – при использовании первого аргумента функции header() типа «location» по умолчанию в заголовок передается код состояния «302» (временно перемещен). Это может стать проблемой при переносе ресурса на другое доменное имя. В поисковиках такое временное перенаправление может затянуться. Ведь поисковик постоянно анализирует код состояния. А в нем записано «временно перемещен». Пример принудительной перезаписи кода состояния «302» на «301» (постоянно перемещен):
<?php
header('Location: http://localhost/redirect2.php',true, 301);
?>
Также перезапись возможна в два этапа. Первая строка производит перезапись кода состояния, а вторая перенаправляет на новый адрес:
<?php
header('HTTP/1.1 301 Moved Permanently');
header('Location: http://redirect2.php');
?>
- Использование редиректа внешних ссылок для перенаправления в зависимости от роли пользователя. Роль определяется во время процедуры аутентификации. Значение для обработки записывается в переменную $who:
<?php
switch ($who){
case "user": $redirect_url = "/blog.html"; break;
case "author": $redirect_url = "/author.html"; break;
case "admin": $redirect_url = "/admin.html"; break;
default: $redirect_url = "/registration.html";
}
header('HTTP/1.1 200 OK');
header('Location: http://'.$_SERVER['HTTP_HOST'].$redirect_url);
exit();
?>
- Упрощенный практический пример реализации редиректа внешней ссылки – клик по ссылке ведет на страницу php. Отсюда пользователя через 5 секунд перекидывает на Рамблер. Код html:
<a href="http://localhost/redirect3.php" target="_blank">Нажми меня</a>
Код файла redirect3.php:
<?php
header('Refresh: 5; url=http://rambler.ru/');
echo "Привет!Через 5 секунд вас выкинет на Рамблер))";
?>

Ну, вот мы и научились основам редиректа на php. Теперь можно смело браться за перенаправление пользователей в нужное русло. Главное не ошибиться в направлении, а то приведете всех своих юзеров на чужой сайт…