GoldPride
Вернуться   GoldPride > Полезная информация > Программирование > Программирование на HTML/PHP
Важная информация

Ответ
 
Опции темы Опции просмотра

  #1
Старый 16.08.2016, 03:30
xEkk
Журналист
Почетный гражданин
Аватар для xEkk
xEkk вне форума

 
Регистрация: 08.08.2013
Адрес: Москва
Сообщений: 1,247
Сказал(а) спасибо: 192
Поблагодарили 238 раз(а) в 80 сообщениях
Репутация: 2443
Post Как сделать редирект на 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:"


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



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

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

Код:
<?php

header('Location: http://localhost/ redirec2t.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 секунд вас выкинет на Рамблер))";

?>





__________________
Все вопросы/жалобы/предложения/пожелания по контактным данным ICQ: 681995113; Skype: andrey_xekk (других контактов нет) либо в Личное/Публичное сообщение. Сообщения типа "Привет, как дела?", "Тут?" и тому подобные будут игнорироваться.
  Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 01:36. Часовой пояс GMT +5.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, vBulletin Solutions, Inc. Перевод: zCarot
Реклама на Портале | Премиум аккаунты | Положение об отвественности | Правила Портала | Новостной раздел| Черный список-крысы, кидалы