Мужчина всегда ucp php redirect. Как в PHP задать редирект на другой URL до загрузки страницы

  • 06.06.2019

С переадресацией (она же - «редирект») сталкивался каждый пользователь интернета. Достаточно просто выбрать в поисковой системе любой сайт из выдачи и поисковая система автоматически перенаправит Вас на сайт. В этой статье мы расскажем о том, какие виды переадресации существуют и как их настроить.

Основные операторы регулярных выражений

Для начала давайте разберемся с основными операторами регулярных выражений (флаги, модификаторы, специальные символы):

Спецсимволы:

  • ^ — ограничение слева (начало строки);
  • $ — ограничение справа (конец строки);
  • . — любой символ;
  • () — переменная;
  • \ — экранирование (символ после \ считается обычным, а не спецсимволом);
  • — диапазон значений;
  • ! — спецсимвол отрицания.

Модификаторы:

  • ? — символ повторяется 0 или 1 раз;
  • + — 1 и более символов (до 65536);
  • * — 0 и более символов (до 65536).
Как настроить 301 редирект htaccess

Начнем с 301 редиректа в htaccess. Во-первых, он представляет из себя автоматическую переадресацию с одного адреса на другой. Он вполне может применяться в том случае, когда сайт переводится с протокола http на https, когда сайт перенастраивается с «полноразмерных» адресов на ЧПУ (т.е. было https://www.karcher.xyz/content/news/31-01-2017/razdatka , стало https://www.karcher.xyz/ razdatka), а также для «склеивания» страниц-дублей. Во-вторых, 301 редирект сообщает поисковым системам, что «ребята, имеющийся у вас адрес уже не работает, поэтому идите вон туда», а они такие «ОК, учтем». Таким образом, переадресация происходит безболезненно, без потери позиций и ссылочной массы.

Но что будет, если «Ой, да ну нафиг? Буду я еще с переадресациями заморачиваться, только время потеряю!»? Можно сделать и так, НО… история «старой» страницы будет утрачена, а «новая» будет ранжироваться «с нуля». Как следствие - потеря позиций и ссылочной массы (это в лучшем случае).

Варианты применения 301 редиректа:

  • Склейка доменов;
  • Переезд сайта на другой адрес (может пригодиться при попадании сайта под какие-либо фильтры);
  • Для увеличения показателей тИЦ, PR и увеличения трафика при покупке другого домена (настраивается редирект на ресурс, который нуждается в поднятии тИЦ и PR);
  • При смене движка сайта (в этом случае настройка 301 редиректов строго обязательна, в противном случае гарантирована полная потеря трафика);
  • при переезде с http на https;
  • склейка «дублей»

и т.д., всех причин не перечислить.

301 Редирект при смене домена основного сайта

Итак, Вы решили сменить домен. Сразу же даем готовое решение:

User-agent: Yandex

Host: newsite.com

  • настраиваем 301 редирект для всех страниц сайта (кроме файла robots.txt) с помощью приведенного ниже кода:

RewriteCond %{REQUEST_FILENAME} robots.txt$

RewriteRule ^([^/]+) $1 [L]

RewriteCond %{HTTP_HOST} !^www\.site\.com

301 редирект при смене адреса страницы

Постраничный редирект (когда меняется адрес страницы) осуществляется с помощью приведенного ниже кода:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.stokrat\.org$

RewriteRule ^stranica/nastrojka-301-redirekta/$ https://www.сайт/newpage/

Именно этот код используется при «переезде» страниц, например, на ЧПУ.

Настроить редирект с www на домен без www в htaccess

Упоминание www. в адресе домена уже давно не является актуальным. Тем не менее сайтов с www. полно. Склеивание доменов с www. и без должно производиться в строго обязательном порядке, т.к. поисковые системы воспринимают эти 2 домена как 2 разных сайта с разными тИЦ, PR, посещаемостью, ссылочной массой и всем остальным. Следовательно, один из них - оригинал, а второй - «самозванец» с «ворованным контентом». Чтобы этого не происходило - домены с www. и без необходимо «склеить» с помощью 301 редиректа. Код настройки приведен ниже.

Код редиректа с www на без www в htaccess выглядит так:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.site.ru$

Теперь давайте разберемся с директивами.

RewriteEngine on/off - если выражаться простым человеческим языком - она служит выключателем 301 редиректа.

RewriteCond — в этой директиве прописываются условия для «срабатывания» следующей директивы.

RewriteRule — директива преобразования одного адреса в другой.

Настроить 301 редирект с http на https через htaccess

Переезд с http на https многие считают «современным трендом». Однако, на сегодняшний день данная мера является обязательной (хотя формально она таковой не является). И вот настал тот час, когда Вы получили SSL-сертификат, Ваш сайт уже работает и по http и по https. Все что осталось настроить в файле.htaccess 301 редирект с http на https версии страниц сайта. Код для настройки приведен ниже.

RewriteRule ^(.*)$ https://site.ru/$1

А вот код на обратный редирект с https на http. Как видите, отличие всего в 1 символ:

RewriteCond %{SERVER_PORT} !^443$

RewriteRule ^(.*)$ http://site.ru/$1

Редирект со страниц index.php, index.html

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

Поскольку в подзаголовке упомянуты index.php и index.html - Вы уже догадались, что с помощью 301 редиректа мы будем избавляться от дублей главной страницы:

Однако, если у главной страницы есть дубль вида site.ru/index.php, вполне вероятно, что и у остальных страниц есть дубли вида site.ru/index.php/page.html (при оригинальном адресе site.ru/page.html ). Это плохо, поэтому также требуется настройка 301 редиректа с помощью приведенного ниже кода:

RewriteRule ^index\.php/(.*)$ /$1

Нередки случаи, когда у главной страницы есть дубль вида

site.ru/main.html , для которого так же необходимо прописывать 301 переадресацию на site.ru :

RewriteEngine On

RewriteCond %{THE_REQUEST} ^{3,9}\ /main\.html\ HTTP/

Либо альтернативный вариант:

Redirect 301 /main.html HYPERLINK "http://site.ru/" http :// site . ru /

А вот теперь рассмотрим обратную ситуацию - когда Вы хотите склеить дубли, настроив переадресацию с site.ru на site.ru/main.html . Сделать это можно с помощью приведенного ниже кода.

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)

RewriteRule .* %1.html

RewriteRule ^(.*)/$ /$1.html

Ну а если Вам важно, чтобы адреса всех внутренних страниц отображались без.html на конце, то redirect настраивается вот таким кодом:

RewriteCond %{REQUEST_URI} \.html$

RewriteRule ^(.*)\.html$ /$1

Теперь о том как сделать редирект со страницы на страницу а именно с.htm на страницы.html. Для настройки такой переадресации достаточно добавить в.htaccess следующий код:

RewriteRule ^(.*)\.htm$ $1.html

Редиректы с адресов со слэшами в конце и без них

Для начала рассмотрим еще один вид дублей страниц - страницы вида http://site.xyz/page и http://site.xyz/page/ - кроме слэша в конце, они ничем не отличаются. Настраивать redirect можно и с первой на вторую, и со второй на первую. Рассмотрим оба варианта:

Редирект с http://site.xyz/page на http://site.xyz/page/:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !\..+$

RewriteCond %{REQUEST_URI} !/$

RewriteRule (.*) http://www.site.ru/$1/

Redirect с http://site.xyz/page/ на http://site.xyz/page:

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_URI} ^(.+)/$

RewriteRule ^(.+)/$ /$1

Причем абсолютно не важно, будет ли у Вас после редиректа слэш в конце адреса или нет. Главное - чтоб эти адреса были склеены с помощью 301 редиректа.

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

Разумеется, если Ваш сайт работает на движке WordPress или Joomla, то настроить редирект на мобильную версию сайта можно с помощью плагинов.

Однако, Google является сторонником адаптивного дизайна. Следовательно, выделять отдельный домен/поддомен для мобильной версии не нужно. Т.е. в Google утверждают, что «если есть возможность обойтись без редиректов на мобильную версию - именно так и нужно поступать».

Но что делать, если без таких редиректов все-таки не обойтись?

Можно настроить редирект через файл.htaccess

RewriteEngine On

RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml"

RewriteCond %{REQUEST_URI} ^/$

RewriteRule ^ http://m.domain.com%{REQUEST_URI}

Настройка мобильного редиректа через PHP

Необходимо воспользоваться специальной библиотекой Mobile Detect, она необходима для того, чтоб распознать, с мобильного устройства пришел пользователь, или со стационарного.

$detect = new Mobile_Detect;

if ($detect->isMobile()) {// код}

if ($detect->isTablet()) {// код}

if ($detect->isiOS()) {// код}

if ($detect->isAndroidOS()) {// код}

Из этого кода становится очевидно, что можно распознать не только компьютер/смартфон/планшет, но и его операционную систему.

JavaScript редирект

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

  • if (screen.width на

    Способ 2. Настройка редиректа на site.com через.htaccess, вставив вот этот код:

    RewriteCond %{QUERY_STRING} ^route=common/home$

    RewriteRule ^index\.php$ http://site.com/?

    Таким же (а именно - вторым) способом можно настроить редиректы со старых адресов категорий на новые. По умолчанию адреса ссылок в OpenCart выглядят примерно следующим образом:

    site.com/index.php?path=83_94_113&route=product/category

    На такие ссылки смотреть очень больно, причем в прямом смысле, т.к. глаза реально начинают болеть при виде таких адресов. В том же.htaccess можно настроить редирект на «человеческие» адреса вида site.com/category с помощью такого кода:

    RewriteCond %{QUERY_STRING} ^path=83_94_113&route=product/category$

    RewriteRule ^index\.php$ http://site.com/new-category?

    Но что делать с динамическими адресами, которые из-за привязки к определенной секции имеют вид site.com/katalog?c=okna-pvkh ?

    Программисты довольно долго искали решение. «Методом тыка» (точнее - проб и ошибок) решение было найдено. В данном случае происходит редирект на главную страницу сайта:

    RewriteCond %{QUERY_STRING} ^c=okna-pvkh$

    RewriteRule katalog http://site.com/?

    Примечания и ошибки

    Теперь поговорим о том, как не допускать ошибок при настройке 301 редиректа:

    • Нельзя нарушать последовательность правил переадресации. После настройки редиректа необходимо убедиться, что настройка не дала каких-либо «побочных эффектов». Если нарушить последовательность правил, то ранее настроенные редиректы могут либо прекратить функционировать, либо функционировать неправильно. Противоречий в правилах быть не должно.
    • Не стесняйтесь пользоваться официальными мануалами, т.к. у 301 редиректа из-за непростого синтаксиса есть множество особенностей. Упустить какой-то нюанс при настройке - проще простого.
    • После очередных «допиливаний» ВСЕГДА проводите полную проверку работоспособности тех правил, которые были внедрены ранее. Настройка без проверки - это не настройка даже «для галочки». Один лишний символ может «обвалить» работу всего сайта, либо заставить его работать неправильно. За другими программистами нам уже не раз приходилось исправлять работу сайта, когда с адреса site.com/oldpage происходит 301 редирект на site.com/newpage , а затем с помощью того же 301 редиректа происходит переадресация обратно на site.com/oldpage и далее «по кругу».

    Ну и в заключение приведем несколько примеров, когда применять 301 переадресацию вообще нельзя.

    Во-первых, «многоходовки», когда идет череда из нескольких 301 редиректов подряд. Гораздо правильнее настроить редирект сразу на «финишный» адрес.

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

    В-третьих, редиректы «не туда». Т.е. если страница переехала с первого адреса на второй, а при настройке редиректа Вы ошибочно указываете адрес совершенно другой страницы.

    В-четвертых, redirect на страницу, которая работает по каким-то причинам очень некорректно. Страница должна работать стабильно и отдавать либо код 200, либо код 404.

    В-пятых, редирект файла robots.txt. Это запрещено правилами многих поисковых систем. Более того, многие допускают одну и ту же ошибку - когда настраивают htaccess редирект на https с http://site.xyz/robots.txt на https://site.xyz/robots.txt . Файл robots.txt должен быть доступен по обоим адресам без всяких переадресаций. Ровно то же самое касается и xml-карты сайта.

    Как часто вам нужно переадресовать пользователя на другую страницу? Уверен, не редко. Для осуществления этой задачи используются несколько способов.

    Переадресация на javascript

    На странице, с которой вы хотите перенаправить пользователя, установите следующий код:

    window.location.href = "http://www.сайт"

    Вместо http://www.сайт укажите страницу, на которую следует переадресовать пользователя. Способ не работает, если в браузере не включен javascript. Но, как показывает практика, javascript всключён почти у всех пользователей сайта. Но при этом отключён у поисковых ботов.

    Переадресация с помощью meta-тега refresh

    Воспользуемся html тегами. Тег, указывающий на время обновления страницы, выглядит так:

    Тег в таком виде заставит обновить страницу в браузере через 5 секунд, заменив адрес страницы на новый, указанный в теге.
    Но нас 5 секунд не устраивают, поэтому окончательный вариант тега будет таковым:

    < meta http-equiv = "refresh" content = "0;url=http://www.сайт" />

    Минусом переадресации тегами и javascript является то, что в случае переезда сайта, смены домена, или перемещении файлов, статья для пользователя остаётся той же, а для поисковых систем — нет. Поэтому при переезде сайта категорически нельзя использовать эти методы, так как основной сайт выпадет из результатов поиска из-за своей пустоты, а новый сайт не попадёт в результаты из-за «плагиата». Да, да, поисковые системы оценят сайт как плагиатчик. И этот сайт украл содержание с вашего предыдущего сайта. Плагиатчики значительно опускаются в результатах поиска. Не делайте ошибок.

    Переадресация средстави php

    Здесь всё просто. Нужно отправить соответствующий http заголовок

    Печальный опыт говорит, что нельзя пренебрегать статусами сервера.
    Одна из моих статей часто встречалась в выдаче у поисковиков. Но вздумалось мне перенести её на другой адрес. В результате адрес А сменился на адрес Б. При этом я никаких заголовков для посетителей адреса А не отсылал. Спустя какое-то время поисковые боты нашли и страницу Б. Проиндексирвоали её, увидели, что она совпадает со страницей А, проигнорировали её. Потом зашли на страницу А, увидели, что она исчезла, удалили её из собственной базы.
    В результате моя статья выпала из выдачи поисковиков.

    Поэтому не забывайте при переносе материалов указывать нужные http заголовки.

    Переадресация средствами сервера apache (.htaccess)

    Пожалуй, самый удобный способ переадресации. Пример редиректа на новый домен:

    Таким образом мы перенаправляем запрос с файла old.htm , лежащего в корневой директории сайта, на файл rewrite.html, лежащий в директории newcategory.

    Как вы уже успели заметить (а кто не успел, у того ещё есть последний шанс), RewriteRule поддерживает регулярные выражения, что позволяет творить с переадресацией что угодно.
    Например, я делал файл.htm изображением (RewriteRule ^(.*).htm$ $1.jpg) , т.е. с адреса dog.htm браузер перекидывал меня на картинку dog.jpg. Я не хочу расписывать все возможности модуля mod_rewrite, с чьей помощью мы сейчас работали. Об этом написано немало уроков, но, если хотите, можете сами поискать дополнительную информацию об этом. (Например, на , правда, на английском языке.)

    Преимуществом этого способа является его безболезненность. То есть перенос материалов и последующая переадресация со старого адреса на новый никак не отразятся на позиции сайта в поисковых системах. Система работает так же, как и переадресация на php, за исключением того, что она не требует установленного php. Но есть и минус: переадресация через mod-rewrite нагружает сервер немного сильнее, чем такая же переадресация через php. Да и модуль mod-rewrite не всегда бывает установлен на apache. Хотя сейчас большинство хостеров и ставят его, продолжают встречаться единичные клинические случаи, когда этот модуль не установлен.

    Выбирайте способ, который вам больше подходит, и устанавливайте его на сайт!

    Послать каждый может. А вот правильно перенаправить – это целое искусство. Но еще труднее дается перенаправление пользователей на нужный путь в интернете. Для этого лучше всего подходит редирект на 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, преимущества этого шага очевидны: PHP – серверно ориентированный язык скриптов; перенаправление будет выполняться посредством скрипта на сервере, а не в браузере посетителей. Некоторые перенаправления могут быть выполнены на стороне клиента — через редирект js (то есть через JavaScript редирект).

    Это более гибкий и универсальный подход, и вы можете выполнить несколько типов редиректа в PHP, в отличие от других методов. Вот — наиболее частые виды редиректа, которые можно сделать в PHP: a) 301 редирект PHP (статус постоянного перенаправления), b) 302 редирект PHP (временный статус переадресации), с) Обновление.

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

    Заголовок языка PHP функции

    Например, предположим, вы хотите сделать редирект к этому URL http://www.somewebsite.com/target.php. В исходном PHP страницы, Вам просто следует вызвать этот скрипт редиректа:

    Попробуйте также провести этот простой эксперимент на вашем локальном хостинге:

    1) Откройте текстовый редактор и введите этот код:

    Сохраните его как targetpage.php.

    2) Откройте другой пустой текстовый файл и введите этот код:

    Сохраните его как originatingpage.php.

    3) Теперь запустите веб-браузер. В адресной строке браузера введите: http://localhost/originatingpage.php

    4) Вы заметите, что после нажатия кнопки ввода, этот URL: http://localhost/originatingpage.php делает редирект на http://localhost/targetpage.php и на targetpage.php, и вы видите слова «Hi this is codex-x».

    Одна из самых распространенных ошибок может крыться в оформлении кода html редиректа:

    Попробуйте выполнить этот эксперимент:

    Перейдите к скрипту originatingpage.php и добавьте любой HTML тег:

    header(‘Location: http://localhost/targetpage.php’);

    Предположим, у вас есть такой код:

    Это – ошибка редиректа