Редирект
Все большее количество людей начинает спрашивать, что такое редирект (redirect) и что он делает. Именно это и стало причиной написания статьи. Надеюсь, что ознакомившись с ней, далекие от программирования люди, получат ответ на искомый вопрос, а начинающие веб-программисты смогут почерпнуть для себя что-то новое.
Зачем используется редирект?
По сути, редирект – это перенаправление посетителей с искомой страницы. Когда это используется? Вариантов более чем достаточно. К использованию редиректа частенько прибегают после смены названия сайта. Допустим, вы администратор сайта https://www.roga-i-kopita.com/. Так получилось, что вам пришлось поменять адрес сайта на новый - https://zveri.com/.
Многие могут удивиться, дескать, зачем вообще нужен редирект? Есть же паркинг домена, да и можно вовсе используя cpanel просто дописать новое имя, что в этом сложного. Однако не все так просто. Само собой, в описанных выше случаях, набирая в адресной строке адрес первого сайта, браузер вам его и покажет. Но есть существенная разница, в паркинге под доменами используемых адресов сайтов, подразумевается изначальный адрес. А в случае редиректа произойдет перенаправление на другой сайт с полным изменением URL в строке браузера.
Кроме этого редирект можно задействовать для переадресации с одной страницы на другую страницу, к примеру с
https://oldsite.com/
на
https://www.oldsite.com/
Также редирект служит для добавления слэша (косая черта). Например, с
https://evorate.ru/blog/seo-blog/redirekt
делается перенаправление на другой адрес -
https://evorate.ru/blog/seo-blog/redirekt/
Не стоит забывать про любителей «халявы». Есть такое определение «склейка» доменов. Для этого всего-то нужно получить неплохой ТИЦ и PR. Покупатель обязательно найдется, среди неопытных Web-дизайнеров частенько встречаются люди, в силу своей неопытности покупающие подобные подделки.
Как сделать редирект?
Способов сделать перенаправление с одной страницы на другую – огромное количество. Описывать их всех попросту не имеет смысла, поэтому давайте разберем несколько наиболее популярных и часто используемых.
.htaccess редирект:
Для редиректа нужно просто поместить файл .htaccess в папку с которой нужен редирект.
301 редирект с одной страницы на другую. Самый простой вариант:
Redirect 301 /test-1/ https://site.ru/test-2/
Более подробный.
RewriteCond %{REQUEST_URI} ^/test/$
RewriteRule ^.*$ https://site.ru/new-test/? [R=301,L]
301 редирект с www на без www (главное зеркало – домен без www)
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
301 редирект с без www на www (главное зеркало – домен с www)
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]
301 редирект со страниц со слэшем на без слэша (весь сайт).
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]
301 редирект со страниц без слэша на слэш (часто в CMS системах устанавливается автоматически).
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
Один (а не два последовательных!) 301 редирект на без www и с слэшем на конце адреса страницы.
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1/ [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ https://%1/$1/ [L,R=301]
Один (а не два последовательных!) 301 редирект на c www и со слэшем на конце адреса страницы.
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://www.%1/$1/ [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ https://www.%1/$1/ [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]
Один (а не два последовательных!) 301 редирект на c www и без слэша на конце адреса страницы.
RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ https://www.%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)$ https://www.%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)\/$ https://www.%1/$1 [L,R=301]
Один (а не два последовательных!) 301 редирект на без www и без слэша на конце адреса страницы.
RewriteCond %{REQUEST_URI} ^\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)\/$ https://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [L,R=301]
RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} \/$
RewriteCond %{HTTP_HOST} ^([^www].*)$
RewriteRule ^(.*)\/$ https://%1/$1 [L,R=301]
301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru.
RewriteCond %{REQUEST_URI} /index.php
RewriteCond %{QUERY_STRING} ^\z
RewriteRule ^(.*)$ https://site.ru/? [R=301,L]
301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php).
Пример: типа site.ru/index.php?n=1 на site.ru/?n=1
RewriteCond %{REQUEST_URI} /index.php
RewriteRule ^(.*)$ https://site.ru/ [R=301,L]
301 редирект для index.php, index.html или index.htm (например в Joomla), массовая склейка.
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ https://site.ru/$1 [R=301,L]
301 редирект url с GET параметрами (динамический URL) на статический.
1 вариант (простой адрес с GET параметром)
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]
2 вариант (со страницы и GET параметром)
RewriteCond %{REQUEST_URI} /test/
RewriteCond %{QUERY_STRING} ^id=229
RewriteRule ^.*$ /supermodel/? [R=301,L]
Все страницы одного домена на главную страницу другого домена.
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ https://site.ru/ [L,R=301]
Каждая страница одного домена на такой же адрес другого url.
RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ https://site.ru/$1 [L,R=301]
Редирект с протокола http на https.
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Не забываем менять url на сайте (https://site.ru на https://site.ru). Да и вообще, если задумали переходить на HTTPS наш вам совет - сделайте резервную копию. А лучше две ?
Если возникает циклический редирект, то воспользуйтесь этим вариантом:
RewriteCond %{HTTPS} off
RewriteCond %{https:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Редирект с протокола https на http.
Обратный редирект, если перестали использовать SSL сертификат.
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
С помощью данного метода можно проводить и сложные переадресации, в таком случае этот метод полностью идентичен с header-редиректом (указывается внешний URL).
javascript - редирект:
Отличительная черта данного способа в том, что браузер сначала загружает страницу HTML – и лишь затем происходит перенаправление на нужный адрес сайта. В случае использования данного способа может появиться некоторая задержка, поскольку нужно дождаться пока прогрузится HTML, это считается небольшим, но минусом данного способа. Кроме этого, переадресация не сработает, если на ПК не установлен javascript, т.к. HTML страница не будет грузиться.
Вот примерное оформление файла:
<script type="text/javascript">
document.location = '//evorate.ru/';
</script>
В данном случае нужно учитывать, что если на странице (page) есть код «Яндекс.Метрики» - он попросту не успеет засчитать пользователя, поскольку данный редирект работает быстрее метрики. Также учтите, что во время оформления, важно все написать правильно, в противном случае пользователя просто перенаправит на другой, несуществующий сайт с ошибкой 404.
Не забывайте, что перенаправление делается не только для интернет-пользователей, но и для поисковых роботов, которые составляют рейтинг сайтов в поисковиках. Надеюсь, статья была вам полезной.
Комментарии