С переадресацией (она же - «редирект») сталкивался каждый пользователь интернета. Достаточно просто выбрать в поисковой системе любой сайт из выдачи и поисковая система автоматически перенаправит Вас на сайт. В этой статье мы расскажем о том, какие виды переадресации существуют и как их настроить.
Основные операторы регулярных выражений
Для начала давайте разберемся с основными операторами регулярных выражений (флаги, модификаторы, специальные символы):
Спецсимволы:
Модификаторы:
Начнем с 301 редиректа в htaccess. Во-первых, он представляет из себя автоматическую переадресацию с одного адреса на другой. Он вполне может применяться в том случае, когда сайт переводится с протокола http на https, когда сайт перенастраивается с «полноразмерных» адресов на ЧПУ (т.е. было https://www.karcher.xyz/content/news/31-01-2017/razdatka , стало https://www.karcher.xyz/ razdatka), а также для «склеивания» страниц-дублей. Во-вторых, 301 редирект сообщает поисковым системам, что «ребята, имеющийся у вас адрес уже не работает, поэтому идите вон туда», а они такие «ОК, учтем». Таким образом, переадресация происходит безболезненно, без потери позиций и ссылочной массы.
Но что будет, если «Ой, да ну нафиг? Буду я еще с переадресациями заморачиваться, только время потеряю!»? Можно сделать и так, НО… история «старой» страницы будет утрачена, а «новая» будет ранжироваться «с нуля». Как следствие - потеря позиций и ссылочной массы (это в лучшем случае).
Варианты применения 301 редиректа:
и т.д., всех причин не перечислить.
301 Редирект при смене домена основного сайтаИтак, Вы решили сменить домен. Сразу же даем готовое решение:
User-agent: Yandex
Host: newsite.com
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 пикселей в ширину. Именно в ширину, не в высоту.
Способ 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 переадресацию вообще нельзя.
Во-первых, «многоходовки», когда идет череда из нескольких 301 редиректов подряд. Гораздо правильнее настроить редирект сразу на «финишный» адрес.
Во-вторых, если по каким-то причинам есть 2 страницы с дублирующим контентом, но нужно сохранить для пользователей обе.
В-третьих, редиректы «не туда». Т.е. если страница переехала с первого адреса на второй, а при настройке редиректа Вы ошибочно указываете адрес совершенно другой страницы.
В-четвертых, redirect на страницу, которая работает по каким-то причинам очень некорректно. Страница должна работать стабильно и отдавать либо код 200, либо код 404.
В-пятых, редирект файла robots.txt. Это запрещено правилами многих поисковых систем. Более того, многие допускают одну и ту же ошибку - когда настраивают htaccess редирект на https с http://site.xyz/robots.txt на https://site.xyz/robots.txt . Файл robots.txt должен быть доступен по обоим адресам без всяких переадресаций. Ровно то же самое касается и xml-карты сайта.
Быстрая навигация по этой странице:
Если вы решили написать скрипт и сделать редирект 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’);
Предположим, у вас есть такой код:
Это – ошибка редиректа