редирект на php на файл

Редирект на php на файл

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

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

В основе редиректа на php лежит использование функции (справка):

Для того, чтобы осуществить непосредственный редирект, необходимо чтобы был указан специальный вид строки заголовка «location: …». Например, так:

в данном случае, после отправки заголовка, пользователь будет перенаправлен на любой сайт, указанный вместо «http://www.example.com/».

Важно отметить, что согласно спецификациии HTTP/1.1 необходимо в качестве аргумента «location» указывать абсолютный путь, с указанием протокола подключения (например: http), имени хоста (домен сайта) и пути назначения. Это требование прямо указано в справке по функции header().

Передача кода HTTP статуса при редиректе (301/302).

Коды HTTP ответа можно задавать принудительно двумя различными способами. Первый способ следует из спецификации самой функции header, в которой в качестве третьего параметра можно указывать код статуса HTTP, например:

Второй способ принудительной передачи кода HTTP ответа – отправка строки заголовка иного вида, перед отправкой заголовка «location». В большинстве случаев это:

Однако, если на Вашем сервере включен режим FastCGI, то строка заголовка со статусом ответа должна быть несколько иной:

Php-редирект с условием.

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

Например, после авторизации пользователя идет обращение к базе данных с целью определения типа пользователя («администратор», «автор» или «читатель»), и в зависимости от того какой тип пользователя, происходит перенаправление в соответствующие разделы сайта. Саму авторизацию и извлечение данных рассматривать не будем, рассмотрим лишь способы организации проверки и отправки соотвествующего заголовка «location».

Мне представляется три наиболее логичных способа реализации такой возможности. Первый, заключается в последовательной проверке типа пользователя условиями «if … elseif …. else». Это может выглядеть примерно следующим образом:

Второй способ, связан с использованием конструкции «switch … case … ». Это может выглядеть примерно следующим образом:

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

Третий вариант, мне кажется наиболее красивым и простым.

Передача сессии при php-редиректе и отключенных куках в браузере клиента.

Если Вы в своих скриптах используете сессии, то при работе с функцией header() важно понимать ее некоторую особенность.

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

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

Проблема заключается в том, что для заголовков header(“location: …”) такая функция не предусмотрена. Если в браузере пользователя куки включены – то, как правило, никаких проблем с сессиями при header-редиректе не возникнет. А вот если – отключены, то сессия пользователя не сможет быть открыта заново на другой странице сайта (и пользователю, например, будет заблокирован доступ к контенту). Поэтому, в случае отключенных кук требуется вручную приписать идентификатор сессии к URL-адресу редиректа. Таким образом, идентификатор сессии будет передан методом GET:

Если у Вас этот параметр в значении «1», то чтобы не менять глобальные настройки сервера в php.ini, Вы можете в файле-приемнике (на который будет идти перенаправление), перед стартом сессии вставить код:

то есть локально, для данного файла, этот параметр перевести в значение «0». После чего выводите старт сессии:

Осталось лишь теперь достоверно знать: включены ли куки в браузере пользователя? И в зависимости от этого передавать или не передавать идентификатор сессии в виде GET-параметра запроса. Скрипт, с помощью которого можно определить доступность cookies в браузере пользователей Вашего сайта можно подсмотреть здесь.

Безопасность.

Редирект при переходе по внешней ссылке с сайта и скрытие реферальной ссылки.

По ряду причин, бывает выгодно все внешние ссылки с сайта сделать не прямыми, а пропустить редиректом через некий служебный файл Вашего сайта, возможно даже с задержкой на секунд 20-30. Это может быть выгодно, если Вы планируете зарабатывать на сайте с помощью различных бирж ссылок, так же отсутствие прямых внешних ссылок якобы улучшает индексацию сайта поисковыми системами. Хотя, это спорный вопрос. В конце концов, редирект внешних ссылок может быть интересен тем, кто не хочет «светить» посетителям своего сайта реферальные ссылки, для многих администраторов блогов это кажется важным.

В целом, принцип редиректа внешних ссылок можно изложить примерно таким образом. Вы создаете служебный файл редиректа (redirector.php), с примерно таким содержимым:

а в тексте статей Вашего сайта ссылки прописывать следующим образом:

И таким образом при каждом нажатии на ссылку, пользователь будет сначала переходить на файл redirector.php и тут же перенаправляться на тот URL, который указан в GET параметре «url» запроса.

Но, это лишь принцип. Сама по себе, приведенная реализация довольно топорна. Во-первых, по-хорошему нужно проверять регулярным выражением все, что приходит с GET-запросом. Во-вторых, по-хорошему нужно уберечься от того, чтобы никому не пришло в голову пользоваться Вашим файлом перенаправления, для того чтобы перенаправлять пользователей на свои сайты или на зараженные сайты. Ведь ничто не мешает такую же ссылку на этот файл опубликовать на любом другом блоге и это сработает. Это значит, что нужно как-то обезопаситься. Можно проверять параметр «REFERRER», чтобы убедиться что запрос пришел со своего сайта. Но, я точно знаю что этот параметр можно подделать – поэтому такая проверка не надежна. Да и вообще, писать ссылку и внутри этой ссылки в качестве GET-параметра еще одну ссылку – это как-то не красиво… В-третьих, если на Вашем блоге уже есть много внешних ссылок, то их всех придется переделывать руками – что очень не удобно. Я предпочитаю автоматизировать.

Поэтому мне видится другая, более красивая на мой взгляд реализация. Например, при создании новой статьи на Вашем блоге, вы можете совершенно спокойно публиковать в ней внешние ссылки «как есть». Но при выводе текста статьи на лицевой стороне сайта, воспользоваться php-функцией:

С помощью которой, можно осуществить глобальный поиск ссылок по всей статье. Если ссылка ведет на внешний ресурс, то саму ссылку записать в базу данных, а в тексте статьи заменить ее на синоним, который является ссылкой на redirector.php и в ней передать идентификатор исходной ссылки. В общем, код обрабатывающий текст статьи на выводе (или при сохранении статьи) может быть примерно такой (для ясности, специально вставил комментарии к каждой строке):

таким образом при выводе или при сохранении статьи, все внешние ссылки автоматически буду заменены на ссылку к скрипту redirector.php, в которой в качестве GET-параметра указан id ссылки. Скрипт можно усовершенствовать так, чтобы подставлялся не id ссылки, а транслитерация текста ссылки, что возможно будет более эффективно с точки зрения индексации ПС.

Сам скрипт redirector.php может содержать примерно такой код (с комментариями):

При этом структура таблицы «urls» этих ссылок в базе данных, такова:

редирект на php на файл. Смотреть фото редирект на php на файл. Смотреть картинку редирект на php на файл. Картинка про редирект на php на файл. Фото редирект на php на файл

То есть, в таблице два поля: числовое поле url-id, значение которого генерируется автоматически при создании новой записи; и строковое поле url – собственно значение самой ссылки.

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

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

Редирект с задержкой + Вывод обратного отсчета оставшегося времени.

Иногда на сайтах можно видеть при попытке перейти по внешней ссылке сообщение типа «Вы покидаете наш сайт. Вы будете переадресованы автоматически через N секунд.» и идет обратный отсчет секунд.

Вообще, есть как минимум 4 различных способа вызвать задержку перенаправления. Можно вызвать паузу в исполнении php-скрипта, непосредственно перед отправкой заголовка «location»:

задержка произойдет на 15 секунд. Но недостаток этого метода, в том что пользователь может быть введен в заблуждение, тем что ему придется эти 15 секунд ждать на той же странице, на которой он кликнул – выглядит так, будто бы ссылка не работает, а потом вдруг «бах» и перенаправило… Не очень удобно.

Второй способ: это немного модифицировать отправляемый заголовок, и вместо «location» написать:

задержка снова произойдет на 15 секунд, при этом визуально откроется страница, которую возвращает скрипт redirector.php, что может быть удобно для того чтобы вывести какую-то полезную информацию.

Третий способ, связан с выводом в разеле head html документа тега в нем же указывается время задержки и адрес перенаправления. Это может выглядеть примерно так:

Задержка также 15 секунд и при этом открывается страница, с которой непосредственно идет редирект на целевой адрес.

Второй метод связан с отправкой специфического заголовка, третий – выводом html в разделе head документа, а четвертый – с выводом javascript кода, в котором указывается целевой адрес и задержка в милисекундах. Например так:

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

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

Источник

Благодаря «RewriteBase /» удобнее делать преобразования URI (убирается привязка к физическому расположению файлов сайта на сервере).

Давайте рассмотрим самые распространенные примеры:

1. Простой редирект

Для простого редиректа условия задавать не обязательно, только правило.

2. Реврайт без редиректа

Иногда требуется, чтобы был редирект без смены адреса, т.е. реврайт без редиректа. Для этого просто не указываем флаг редирект (R), и получаем желаемый результат, теперь по адресу news/happy получим news.html, а в адресной строке останется news/happy

3. Редирект с сохранением рейтинга страницы

4. Редирект для домена с www.site.com на site.com

Убираем у всех запросов вначале «WWW.»

5. Редирект для домена с site.com на www.site.com

6. Редирект с index.php (html,htm) на главную страницу

7. Редирект с index.html на папку (удаление из строки браузера index.html)

9. Чтобы вместо page.htm загружался файл page.html

10. Переезд с одного домена на другой

11. Редирект всех файлов в папке на один файл

12. Задание типа индексной страницы (php, html, htm и другие)

Указывается порядок загрузки типов индексного файла, лежащих в корне каталога.

13. Убираем у всех запросов в конце index.php. Переадресуем на страницу без index.php

Поисковые системы плохо относятся к дубрям страниц. Чтобы этого избежать нужно удалить (склеить) страницы вида https://ваш_домен/ и https://ваш_домен/index.php

14. Определение кодировки, в которой сервер «отдает» файлы

Варианты: KOI8-R, UTF-8, Windows-1251

15. Определение кодировки на загружаемые файлы

Варианты: KOI8-R, UTF-8, Windows-1251

16. Кэширование для всех типов файлов по времени доступа

17. Кэширование для всех типов файлов по времени изменения

18. Кэширование для определённых типов файлов

19. Главная страница без дублирования

20. Редирект страниц без слэша в конце URL на слеш

Чтобы предотвратить ситуацию с индексированием страниц www.site.com/about и www.site.com/about/ как разных, ставим следущий код: Со страниц без слэша будет установлен редирект на «слэшевые».

21. Принудительная постановка замыкающего слеша

Следующий код всегда будет добавлять слеш в адрес URL вашего сайта, что хорошо помогает в области SEO сайта.

22. Удалить слеш в конце

23. Удаляем «category» из URL

24. Редирект URL страницы с папки в корень сайта

Например страница лежит на сервере в site.com/category/blue.html, но надо чтобы страница работала по запросу site.com/blue.html

25. Редирект от GET параметров

Например, нужно что бы со страницы /?action=page&id=15 был редирект на /page/15/

26. Редирект на мобильную версию сайта

Допустим, что мобильная версия расположена на поддомене m.site.com. Будем переходить на мобильную версию только с главной страницы основного домена.

Первой строкой мы проверяем USER_AGENT, определяем что он относится к мобильникам. (эту строку я детально не проверял, взял на просторе интернета, возможно она не совсем корректная, или есть более универсальная строка. Но на моих мобильных устройствах этот пример работает)

Второй строкой проверяем что мы находимся на нужном домене (т.к. пример не универсальный)

Третьей строкой, мы проверяем, что находимся на главной страницы (без всяких параметров и прочего) и перенаправляем на поддомен.

27. Редирект на мобильную версию сайта (Универсальная версия)

28. Обработка ошибок Apache

29. Сохранение (загрузка) файлов вместо открытия

30. Переадресация с www.site.com/index.php?idc=4&marea=6 на www.site.com/

31. Редирект с поддомена на основной домен второго уровня

32. Изменяем переменные php и передаём обработку другому скрипту.

33. Убираем переменные php из запроса

(вырезаем из URI всё, что находится после знака вопроса)

34. Заперт входа на сайт

Запрещаем вход на сайт Интернет Експлореру (вернее, кто себя так определяет) и пользователям с определённого IP-адреса (xxx.xxx.xxx.xxx).

35. Закрываем от всех

36. Закрываем конкретный файл от всех

37. Разрешаем доступ только с одного ip

38. Запрещаем доступ с конкретных ip

39. Убираем из Урла (URL) расширение файла

php можно заменить другим расширением. Например: html, htm, shtml, asp

41. Запрещаем отображать содержимое директории, если нет индексного файла

Вы скорее всего хоть раз видели текст Index of и список файлов. Так происходит в том случае, когда в директории нет индексного файла (например index.php), а система предлагает выбрать файл для дальнейшего открытия. Минус этого заключается в том, что случайный пользователь может увидеть список и содержание всех файлов директории.

42. Перенаправление с HTTPS на http

43. Редиректы в зависимости от времени

Когда нужно применять уловки типа содержания зависящего от времени масса вебмастеров все ещё используют CGI скрипты которые производят редиректы на специальные страницы. Как это может быть сделано через mod_rewrite?

Есть много переменных названных TIME_xxx для условий редиректа. В связке со специальными лексикографическими образцами для сравнения STRING и =STRING мы можем производить редиректы зависящие от времени:

Это выдает содержимое foo.day.html при запросе URL foo.html с 07:00 до 19:00 а в оставшееся время содержимое foo.night.html.

44. Редирект в URL с подчеркивания в дефис

45. Редирект в URL с больших символов на маленькие

46. Массовый редирект новых файлов

Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа.

old_id INT new_url VARCHAR (255)

Источник

Как сделать редирект в PHP

Читайте нашу статью, чтобы узнать, как сделать редирект PHP.

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

Редирект — это перенаправление пользователя с одной страницы на другую. Причём редирект можно настроить как на разные страницы одного сайта, так и на страницу другого сайта.

Основные виды редиректов:

PHP location redirect

Для чего нужен редирект

Редирект может понадобиться в следующих ситуациях:

Redirect PHP URL HTTP

Переадресацию можно настроить несколькими способами:

PHP — серверный язык программирования. Это значит, что переадресация будет срабатывать не в коде страницы, а в скрипте, который размещен на сервере. По сути, вы добавляете в код индексного файла скрипт перенаправления. HTML — это язык разметки веб-страниц. Перенаправление можно сделать с помощью метатега, и редирект будет работать именно через код страницы.

Главная особенность редиректа на PHP в том, что переадресация прописана не в коде странице, а с помощью скрипта на сервере. Благодаря этому снижается восприимчивость к фильтрам поисковых систем.

Ниже мы подробнее рассмотрим принцип работы и настройку редиректа в PHP.

Как работает редирект в PHP

Предположим, вы сделали редирект со страницы index.php на index1.php. Когда пользователь откроет страницу с редиректом, в системе произойдёт следующее:

Браузер запросит файл стартовой страницы index.php с сервера.

Сервер, получив запрос от браузера, сообщит, что файл index.php больше недоступен и браузеру нужно искать новый файл index1.php.

Браузер отправит новый запрос к серверу, на котором находится index1.php, и получит ответ.

Браузер отобразит страницу index1.php.

Как настроить PHP-редирект

Прописывать редирект на сайт в PHP нужно в индексном файле. Чаще всего он называется index.php. Для настройки вам понадобится функция header( ). Она выглядит так:

Где $header — строка HTTP-заголовка, который вы будете использовать. Для редиректа нужно использовать заголовок Location — он указывает на адрес целевого сайта.

Чтобы настроить редирект PHP:

Впишите следующие строки:

Где http://site.ru/index1.php — ссылка на индексный файл страницы, на которую ведёт редирект. Если на конечном сайте установлен SSL-сертификат, вместо http:// укажите https://. После этого сохраните изменения:

Periodical readings PHP redirect

Готово, вы настроили редирект.

Как настроить редирект с задержкой

Иногда нужно, чтобы пользователь попал на страницу и только спустя несколько секунд перешел на конечный сайт. Такое перенаправление можно настроить в индексном файле с помощью функции sleep( ).

Чтобы настроить переадресацию с задержкой:

Где 5 — время ожидания в секундах.

Полный код редиректа с задержкой будет выглядеть так:

Источник

Как выполнить редирект с помощью PHP

Дата публикации: 2020-07-09

редирект на php на файл. Смотреть фото редирект на php на файл. Смотреть картинку редирект на php на файл. Картинка про редирект на php на файл. Фото редирект на php на файл

От автора: редирект позволяет перенаправить браузер клиента на другой URL-адрес. Вы можете использовать его при переключении доменов, изменении структуры сайта или переходе на HTTPS. В этой статье я покажу вам, как выполнить редирект на другую страницу с помощью PHP. Я объясню, как именно PHP перенаправляет браузер, и покажу вам, что происходит под капотом.

Как работает базовый редирект?

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

редирект на php на файл. Смотреть фото редирект на php на файл. Смотреть картинку редирект на php на файл. Картинка про редирект на php на файл. Фото редирект на php на файл

Давайте разберемся, что происходит на скриншоте выше:

Браузер клиента запрашивает определенную страницу с сервера. В приведенном выше примере клиент запросил содержимое файла index.php.

редирект на php на файл. Смотреть фото редирект на php на файл. Смотреть картинку редирект на php на файл. Картинка про редирект на php на файл. Фото редирект на php на файл

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Сервер получает запрос файла index.php и хочет проинформировать клиента о том, что он больше не доступен или не перемещен куда-либо еще, и вместо этого ему следует искать новый файл: new_index.php. Сервер отправляет заголовок Location с новым URL-адресом вместе с кодом HTTP 301 или 302. Это HTTP-коды для редиректа.

Когда клиентский браузер обнаруживает код 301 или 302, он знает, что ему нужно инициировать другой запрос к новому URL-адресу для получения содержимого. Он инициирует запрос на извлечение файла new_index.php.

Наконец, сервер отправляет содержимое нового URL-адреса.

Вот как работает базовый редирект HTTP. В следующем разделе мы рассмотрим, как работает редирект PHP.

Как работает редирект в PHP

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

Как использовать функцию header

Давайте рассмотрим синтаксис функции header().

$header: Это строка заголовка HTTP, которую вы хотите использовать. В нашем случае мы будем использовать для перенаправления заголовок Location.

$replace: Это необязательный параметр, который указывает, должен ли заголовок заменить предыдущий аналогичный заголовок.

редирект на php на файл. Смотреть фото редирект на php на файл. Смотреть картинку редирект на php на файл. Картинка про редирект на php на файл. Фото редирект на php на файл

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

$http_response_code: Позволяет отправить определенный код ответа.

Теперь давайте рассмотрим следующий пример, чтобы понять, как все это работает вместе.

Когда приведенный выше скрипт выполняется, он перенаправляет браузер клиента на //www.yoursite.com/new_index.php. В фоновом режиме он отправляет необработанный HTTP-заголовок Location вместе с кодом состояния 302. Код состояния 302 используется для временного редиректа, но если вам нужен постоянный редирект, вы можете передать в третьем аргументе код 301, как показано в следующем фрагменте кода.

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

Зачем использовать функцию Die() или Exit() после заголовка перенаправления?

Некоторые пользователи могли заметить, что я использовал в приведенном выше примере функцию exit(). На самом деле, обязательно использовать функцию exit() или die() сразу после заголовка перенаправления, чтобы остановить выполнение скрипта и избежать нежелательных результатов. Поэтому всегда рекомендуется использовать после перенаправления одну из этих функций.

Знаменитая ошибка: заголовки уже отправлены

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

Практическое правило заключается в том, что, когда вы используете в скрипте функцию header(), вы должны убедиться, что не отправляете перед ней какие-либо выходные данные. В противном случае PHP выдаст ошибку «headers are already sent». Это может произойти, даже если вы отправили перед использованием функции заголовка один пробел.

Заключение

В этом посте мы рассмотрели одну из важных функций PHP-программирования: редирект. Сначала мы описали основы редиректа HTTP, а затем я продемонстрировал, как это работает в PHP.

Автор: Sajal Soni

Редакция: Команда webformyself.

редирект на php на файл. Смотреть фото редирект на php на файл. Смотреть картинку редирект на php на файл. Картинка про редирект на php на файл. Фото редирект на php на файл

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

редирект на php на файл. Смотреть фото редирект на php на файл. Смотреть картинку редирект на php на файл. Картинка про редирект на php на файл. Фото редирект на php на файл

PHP-Мастер

От теории до собственной CMS интернет-магазина

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *