Тарифы Услуги Сим-карты

Перенаправление php header. Как в PHP задать редирект на другой URL до загрузки страницы

12:06 pm - Как перенаправить пользователя на другую страницу?

Есть несколько решений:
1) javascript
2) HTML
3) php
4) .htaccess

1) вот пример кода на языке javascript:

Type="text/javascript">

Вам только нужно создать файл index.htm (или index.html или index.php -- ОДИН из них! это важно) и поместить код в него, предварительно заменив http://www.mysite.com/ на адрес вашего сайта.
Можно указывать путь к папке или прямо на файл, например http://www.mysite.com/cat/file.php

Браузер пользователя будет немедленно* перенаправлен на указанную вами страницу.
*если браузер поддерживает перенаправление. сейчас практически все браузеры поддерживают перенаправление, разве что если браузер хитро настроен самим пользователем =)

Чтобы перед перенаправлением показать пользователю какое-то сообщение, воспользуйтесь другой версией скрипта:

type="text/javascript"> Сейчас вы будете перемещены!

%Если Ваш браузер не поддерживает перенаправление, нажмите сюда: %СЮДА

http://somesite2.com/ -- замените на адрес вашего сайта.

2) Чтобы перенаправить браузер пользователя средствами HTML, используйте тег META:

http://www.blahblahblahsite.com/ -- замените на адрес вашего сайта
10 - означает, что браузер будет перенаправлен через 10 секунд.
Ставьте 0 для немедленного перенаправления.
Если ставите таймаут, то в файле, в можете оставить сообщение пользователю, например:

Через 10 секунд вы будете перемещены!

Если Ваш браузер не поддерживает перенаправление, нажмите сюда: %СЮДА

3) Немедленное пренаправление с помощью PHP:

http://myownsite.com/folder/ -- замените на свой адрес сайта или страницы.
Код должен быть помещен в файл с расширением.php, например index.php

4) Немедленное пренаправление с помощью.htaccess:

Как и любая программа, веб-сервер имеет определенные настройки. Но, у вас, как пользователя Апача может и не быть прав менять конфигурацию Апача через его главные файлы, действие которых распространяется на всех пользователей этого сервера. Но, вы можете менять некоторые конфигурационные файлы, который распространяют свое действие только на ваш сайт. Один из таких файлов – .htaccess

Это файл гибкой настройки веб-сервера Апач. «Гибкий» обозначает, что как только вы поменяли что-то в этом файле, изменения тут же вступают в силу. Фактически, цель.htaccess файлов заключается в предоставлении средств для настройки Apache для пользователей, которые не могут изменить основной конфигурационный файл httpd.conf (этот файл является главным конфигурационным файлом сервера Апач и его действия распространяются полностью на всех пользователей данной копии Апача).

Этот файл не доступен веб-пользователю из браузера. Если файл.htaccess расположен в корневой директории сервера, то его действия распространяется на весь сервер, кроме тех папок, где находится другой файл.htaccess (и кроме всех папок "ниже" этой папки со вторым.htaccess).

Конфигурация файла.htaccess может помочь вам в разных ситуациях, но даже малейшая ошибка синтаксиса (например, отсутствие пробела там, где это нужно) может привести к тому, что содержания вашего сайта может некорректно отображаться или не отображаться вообще. Так как.htaccess это скрытый системный файл, пожалуйста, убедитесь, что ваш FTP-клиент настроен на отображение скрытых файлов.

Создайте пустой текстовый файл с помощью текстового редактора, например Блокнота, и сохраните его как htaccess.txt. Причина, по которой необходимо сохранить файл в htaccess.txt в том, что многие операционные системы и FTP приложения не могут читать.htaccess файлы по умолчанию. После загрузки на сервер, вы можете переименовать файл в.htaccess.

Перенаправление всего сайта на любой другой домен (например, example.net перенаправлен на example.com).

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

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

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

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

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

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

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

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

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

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


  • string $string – строка заголовка;

Существует два типа этого аргумента. Первый предназначен для отправки кода состояния соединения. Он начинается с "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 . Внутри первого разместим вызов функции в следующем формате:

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

echo "Привет! Вы находитесь в файле redirect2.php";


Еще несколько практических примеров использования редиректа на php :

  • Принудительная передача кода состояния http – при использовании первого аргумента функции header() типа «location » по умолчанию в заголовок передается код состояния «302 » (временно перемещен ). Это может стать проблемой при переносе ресурса на другое доменное имя. В поисковиках такое временное перенаправление может затянуться. Ведь поисковик постоянно анализирует код состояния. А в нем записано «временно перемещен ». Пример принудительной перезаписи кода состояния «302 » на «301 » (постоянно перемещен ):

Также перезапись возможна в два этапа. Первая строка производит перезапись кода состояния, а вторая перенаправляет на новый адрес:

  • Использование редиректа внешних ссылок для перенаправления в зависимости от роли пользователя. Роль определяется во время процедуры аутентификации. Значение для обработки записывается в переменную $who :

  • Упрощенный практический пример реализации редиректа внешней ссылки – клик по ссылке ведет на страницу php . Отсюда пользователя через 5 секунд перекидывает на Рамблер. Код html :

Нажми меня

Код файла redirect3.php :


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

(PHP 4, PHP 5, PHP 7)

header — Отправка HTTP-заголовка

Описание

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

header() используется для отправки HTTP -заголовка. В » спецификации HTTP/1.1 есть подробное описание HTTP -заголовков.

Помните, что функцию header() можно вызывать только если клиенту еще не передавались данные. То есть она должна идти первой в выводе, перед ее вызовом не должно быть никаких HTML-тегов, пустых строк и т.п. Довольно часто возникает ошибка, когда при чтении кода файловыми функциями, вроде include или require , в этом коде попадаются пробелы или пустые строки, которые выводятся до вызова header() . Те же проблемы могут возникать и при использовании PHP/HTML в одном файле.


Список параметров

Строка заголовка.

Существует два специальных заголовка. Один из них начинается с "HTTP/ " (регистр не важен) и используется для отправки кода состояния HTTP. Например, если веб-сервер Apache сконфигурирован таким образом, чтобы запросы к несуществующим файлам обрабатывались средствами PHP-скрипта (используя директиву ErrorDocument ), вы наверняка захотите убедиться, что скрипт генерирует правильный код состояния.

Другим специальным видом заголовков является "Location:". В этом случае функция не только отправляет этот заголовок браузеру, но также возвращает ему код состояния REDIRECT (302), если ранее не был установлен код 201 или 3xx .

Replace

Необязательный параметр replace определяет, надо ли заменять предыдущий аналогичный заголовок или заголовок того же типа. По умолчанию заголовок будет заменен, но если передать FALSE , можно задать несколько однотипных заголовков. Например:

Http_response_code

Принудительно задает код ответа HTTP. Следует учитывать, что это будет работать, только если строка header не является пустой.

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Список изменений Примеры

Пример #1 Диалог загрузки

Если нужно предупредить пользователя о необходимости сохранить пересылаемые данные, такие как сгенерированный PDF-файл, можно воспользоваться заголовком » Content-Disposition , который подставляет рекомендуемое имя файла и заставляет браузер показать диалог загрузки.

Пример #2 Директивы для работы с кешем

PHP-скрипты часто генерируют динамический контент, который не должен кешироваться клиентским браузером или какими-либо промежуточными обработчиками, вроде прокси-серверов. Можно принудительно отключить кеширование на многих прокси-серверах и браузерах, передав заголовки:

Замечание :

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

Кроме того, для случаев когда используются сессии, можно задать настройки конфигурации session_cache_limiter() и session.cache_limiter . Эти настройки можно использовать для автоматической генерации заголовков управляющих кешированием.

Примечания

Замечание :

Доступ к заголовкам и их вывод будет осуществляться только в случае, если в используемом вами SAPI есть их поддержка.

Замечание :

Чтобы обойти эту проблему, можно буферизовать вывод скрипта. В этом случае все выводимые данные будут буферизоваться на сервере, пока не будет дана явная команда на пересылку данных. Управлять буферизацией можно вручную функциями ob_start() и ob_end_flush() , либо задав директиву output_buffering в конфигурационном файле php.ini , или же настроив соответствующим образом конфигурацию сервера.

Замечание :

Строка заголовка состояния HTTP всегда будет отсылаться клиенту первой, вне зависимости от того был соответствующий вызов функции header() первым или нет. Это состояние можно перезаписать, вызывая header() с новой строкой состояния в любое время, когда можно отправлять HTTP-заголовки.

Замечание :

В Microsoft Internet Explorer 4.01 есть баг, из-за которого это не работает. Обойти его никак нельзя. В Microsoft Internet Explorer 5.5 также есть этот баг, но его уже можно устранить установкой Service Pack 2 или выше.

Замечание : Если включен безопасный режим , то uid скрипта будет добавляться к realm части WWW-Authenticate заголовка (используется для HTTP-аутентификации).

Замечание :

Спецификация HTTP/1.1 требует указывать абсолютный URI в качестве аргумента » Location: , включающий схему, имя хоста и абсолютный путь, хотя некоторые клиенты способны принимать и относительные URI. Абсолютный URI можно построить самостоятельно с помощью $_SERVER["HTTP_HOST"] , $_SERVER["PHP_SELF"] и dirname() :