Как сделать редирект на php?

Послать каждый может. А вот правильно перенаправить – это целое искусство. Но еще труднее дается перенаправление пользователей на нужный путь в интернете. Для этого лучше всего подходит редирект на php.

Что за редирект?

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

Что за редирект

В каких случаях может потребоваться редирект:

  • Когда происходит замена движка сайта – в результате этого меняется архитектура всего ресурса. После чего возникает проблема, как сделать редирект;
  • При перекройке структуры ресурса – происходит добавление, удаление или перенос целых разделов или одного материала. Пока происходит этот процесс, временно можно организовать перенаправление пользователя на нужный раздел;
  • Если сайт недавно сменил свое доменное имя – после смены имени домена старое еще некоторое время будет фигурировать в поисковой выдаче. В этом случае редирект пользователя на новый домен будет реализован поисковой системой автоматически;
  • В процессе авторизации – как правило, на большом сайте есть две группы пользователей: обычные посетители и администраторы ресурса. В таком случае имеет смысл реализовать редирект каждого пользователя согласно его правам и роли. После авторизации администратор или модераторы сайта попадают в административную часть ресурса, а посетители – на пользовательскую часть ресурса.

Особенности редиректа на php

В отличие от других языков php обладает некоторыми преимуществами в реализации редиректа:

  • Php является серверным языком программирования. Поэтому перенаправление будет происходить не в html коде страниц, отображаемых в браузере, а в скрипте, размещенном на сервере;
  • Редирект на php может быть реализован несколькими способами. Что во многом расширяет его применение;
  • Благодаря обработке данных на сервере перенаправление, реализованное с помощью php, менее восприимчиво к действию фильтров поисковых систем.

Для редиректа в php используется функция header(). Она применяется для отправки заголовка http. Ее синтаксис:

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

Принимаемые функцией аргументы:

<ul>
<li><b>string $string</b> – строка заголовка;</li>
</ul>

Существует два типа этого аргумента. Первый предназначен для отправки кода состояния соединения. Он начинается с "HTTP/". Другой тип вместе с заголовком передает клиентскому браузеру код состояния (REDIRECT 302). Этот аргумент начинается с "Location:"

Особенности редиректа на php
  • bool $replace – является необязательным атрибутом типа bool. Отвечает за переопределение предыдущего заголовка. Если будет задано true, то предыдущий заголовок или заголовки одного типа будут заменены. Если в аргументе задано false, то перезапись заголовка не состоится. По умолчанию, задано значение true;
  • http_response_code – аргумент принудительно устанавливает код ответа HTTP. Установка кода пройдет успешно при условии, что аргумент string не будет пустым.

Код состояния HTTP представляет собой часть верхней строки ответа сервера. Код состоит из трех цифр, после которых идет поясняющая надпись на английском языке. Первая цифра отвечает за класс состояния. Редиректу соответствуют коды от 300 до 307. Их полное описание можно найти в соответствующей технической документации.


При использовании функции header() для редиректа внешних ссылок большое значение имеет место расположения ее вызова. В коде он должен находиться выше всех тегов html:

Код состояния HTTP

Применение редиректа header()

Для демонстрации действия функции на локальном сервере нужно создать два файла. Один из них назовем redirect.php, а другой redirect2.php. Внутри первого разместим вызов функции в следующем формате:

<?php

header('Location: http://localhost/ redirec2t.php ');
?>

В другом файле помещаем строку:

echo "Привет! Вы находитесь в файле redirect2.php";
Привет! Вы находитесь в файле 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. Теперь можно смело браться за перенаправление пользователей в нужное русло. Главное не ошибиться в направлении, а то приведете всех своих юзеров на чужой сайт…