Как настроить 301 редирект в htaccess

3 Мая 2018

СОДЕРЖАНИЕ

Как настроить 301 редирект htaccess

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

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

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

Настроить редирект с http на https в htaccess

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

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

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

302 редирект

Как проверить правильно ли настроен редирект

Как сделать редирект без .htaccess

PHP редирект

Простейший javascript-редирект

Настроить 301 редирект в WordPress

Настройка редиректов в Joomla

Настройка редиректа на OpenCart

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

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

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

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

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

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

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

  • ? — символ повторяется 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 Редирект при смене домена основного сайта

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

  • переделываем robots.txt на старом домене. Готовый текст файла:

User-agent: Yandex

Disallow:

Host: newsite.com

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

RewriteCond %{REQUEST_FILENAME} robots.txt$ [NC]

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

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

RewriteRule ^(.*)$ http://www.site.com/$1 [R=301,L]

Всё!

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

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

RewriteEngine On

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

RewriteRule ^stranica/nastrojka-301-redirekta/$ https://www.stokrat.org/newpage/ [R=301,L]

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

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

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

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

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

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

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

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

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

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

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

RewriteCond %{SERVER_PORT} !^443$

RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]

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

RewriteCond %{SERVER_PORT} !^443$

RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

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

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

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

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/

RewriteRule ^index\.php$ http://site.ru/ [L,R=301]

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

RewriteRule ^index\.php/(.*)$ /$1 [R=301,L]

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

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

RewriteEngine On

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /main\.html\ HTTP/

RewriteRule ^main\.html$ http://vash-sait.ru/ [R=301,L]

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

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

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

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

RewriteRule .* %1.html [R=301,L]

RewriteRule ^(.*)/$ /$1.html [R=301,L]

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

RewriteCond %{REQUEST_URI} \.html$

RewriteRule ^(.*)\.html$ /$1 [R,L]

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

RewriteBase /

RewriteRule ^(.*)\.htm$ $1.html [R=301,L]

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

Для начала рассмотрим еще один вид дублей страниц – страницы вида 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/ [R=301,L]

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

RewriteCond %{REQUEST_FILENAME} !-d

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

RewriteRule ^(.+)/$ /$1 [R=301,L]

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

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

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

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

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

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

RewriteEngine On

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

RewriteCond %{REQUEST_URI} ^/$

RewriteRule ^ http://m.domain.com%{REQUEST_URI} [R,L]

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

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

<?

$detect = new Mobile_Detect;

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

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

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

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

?>

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

JavaScript редирект 

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

  1. <script type="text/javascript">
  2. if (screen.width <= 480) {
  3. window.location = "http://m.domain.com";
  4. }
  5. </script>

Однако, это не совсем верный способ, т.к. столь низкое разрешение далеко не у всех смартфонов, даже бюджетных. Гораздо правильнее заменить в коде число 480 на 720, большинство современных смартфонов имеет разрешение не менее, чем 1280 пикселей в высоту и 720 в ширину.

302 редирект

302 – это временная переадресация (по сути, это единственное отличие от 301 редиректа). Но где она может применяться?

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

Т.е. есть постоянный адрес (например, https://inet-market.xyz/sales/) и сегодня с него происходит редирект на страницу https://inet-market.xyz/sales/december/, т.е. на страницу с декабрьскими акциями. Ну а через несколько дней 302 redirect перенастраивается на https://inet-market.xyz/sales/new-year/, т.е. на страницу с новогодними акциями.

И в таких ситуациях 302 редирект не только уместен, но и является самым правильным решением.

Основные причины применения 302 редиректа:

  • Когда основная страница находится на стадии разработки/доработки/редактировании, поэтому ее надо скрыть от глаз посетителей, настроив временный редирект на другую страницу.
  • Когда требуется, чтобы индексировалась и та страница, с которой происходит перенаправление, и та страница, куда перенаправляют;
  • Когда требуется, чтобы в данный момент пользователи видели именно новую страницу, а не старую (например, если в будущем планируется «возвращение» к «старой» странице);
  • Когда индексирование конечной страницы практически в будущем перестанет играть свою роль (т.е. когда страница создается временно);
  • «Конечная» страница будет периодически меняться.

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

Как проверить 301 редирект

Проверить 301 редирект крайне просто. Вводим в адресную строку старый адрес и смотрим, что будет происходить. Если редирект настроен правильно – адрес в строке изменится. Если нет – значит переадресация настроена неверно.

ВАЖНО! Перед тем как делать выводы о том, что «что-то тут не так», почистите кэш браузера и повторите попытку.

Другой способ – воспользоваться онлайн-сервисами по проверке кода ответа сервера. Например, http://4web.su/s_redirect/. Вводим имя домена и проверяем код ответа. Если редирект настроен правильно, то код ответа будет либо 301, либо 302 (в зависимости от того, какую именно переадресацию Вы настраивали). На некоторых сервисах (кстати, 4web.su – один из них) может отображаться еще и код, который сервер отдает уже после переадресации. Единственный допустимый код в этом случае – 200 ОК.

В данном случае мы попытались проверить как работает http-версия нашего сайта. Во-первых, мы получили сообщение о том, что у нас настроен 301 редирект (т.е. постоянный), новый адрес (https-версия сайта), а также отображены 2 кода ответа - 301 Moved Permanently и 200 ОК.

Если же вместо 200 ОК вылезает код 404 (как на приведенном ниже скриншоте) – значит редирект настроен неправильно.

Как сделать редирект без .htaccess

Большинство программистов настраивает редиректы путем прописывания ранее приведенных кодов в файле .htaccess. Основной минус такого подхода в том, что можно неплохо «накосячить», т.е. код в файл внесли, но он почему-то не срабатывает (или срабатывает, но неправильно). Причины могут быть самыми разными – возможен косяк в самой CMS, либо код на редирект должен располагаться выше/ниже, и т.д., вариантов масса. Поэтому существуют и альтернативные способы настройки редиректа. Например, PHP или JavaScript.

PHP редирект

Во-первых, PHP-это сервероориентированный язык.

Во-вторых, редирект будет происходить на сервере, а не в браузере пользователя.

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

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

PHP-редиректы необходимо оформлять в отдельные php-файлы.

Код редиректа на примере файла index.php:

<?php

header («Location: https://stokrat.org/», TRUE, 302);

?>

или

<?php

header («Location: https://stokrat.org/», TRUE, 301);

?>

В зависимости от того, 301 редирект Вы хотите настроить, или 302. С помощью PHP обычно настраивается 302 редирект.

Простейший javascript-редирект

Основной минус данного способа в том, что не у всех (но у большинства) пользователей включен в браузере JavaaScript. Если JavaScript в браузере отключен – редиректа не произойдет.

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

Оформляется редирект в <body> либо в <head>: 

<script type="text/javascript">

document.location = 'https://stokrat.org/';

</script>

ВАЖНО!!! Данный код в любом случае сработает быстрее, чем код Яндекс.Метрики, а это значит, что Яндекс до редиректа посетителя не засчитает.

Настроить 301 редирект в WordPress

Ранее мы уже говорили, что в WordPress удобнее всего настраивать редиректы с помощью плагинов. О них и поговорим.

Плагин Redirection. Это самый популярный плагин для настройки редиректов. Он почти никогда не жаловался на «извините, у меня с новой версией движка несовместимость», а если и жаловался – то разработчики в считаные часы вносили в плагин все необходимые для совместимости изменения. Число скачиваний уже перевалило за несколько миллионов.

Число переадресаций, которые через него можно настроить, не ограничено. Плюс бонусом можно отслеживать статистику по настроенным с помощью этого плагина редиректам и даже отслеживать ошибочные перенаправления (когда после переадресации отдается код не 200 ОК, а 404 Not Found).

Единственный минус этого плагина в том, что он англоязычный. Но разобраться с настройкой редиректов крайне просто: указываем адрес, откуда будет происходить переадресация, указываем адрес, куда надо переадресовать, выбираем из списка код ответа, добавляем комментарий (при необходимости) и сохраняем. Готово!

Если этот плагин чем-то не устраивает, можно рассмотреть альтернативный - Safe Redirect Manager (разработчик – компания 10up). Принципиально ничем не отличается.

Не грех упомянуть Simple 301 Redirects, но он необходим исключительно для настройки 301 редиректа.

Настройка редиректов в Joomla

Самое ужасное – получение битых ссылок «из ниоткуда». «Да как так-то? Еще вчера все отлично работало! Почему теперь страница не найдена?». Это связано с тем, при обновлении контента, добавлении товаров/продуктов, либо по каким-то иным причинам, адреса могут меняться. И что делать? Правильно – настройка 301 редиректа будет единственным правильным решением. Как и в WordPress, в Joomla данный вопрос решается путем работы с плагинами, т.е. без вмешательства в .htaccess.

И сразу же конкретный пример, когда такое может произойти. Интернет-магазины на Joomla – это не редкость. И вот в магазин поступил новый смартфон, какой-нибудь Gopo Center C4. Менеджеры создают под него карточку товара, затем заказывается реклама и делается рассылка, а затем директор магазина говорит менеджеру «А почему в заголовке не указали, что он в черном и белом цвете? Исправить!», менеджер вносит исправления, вследствие чего адрес ссылки меняется. Итог – вся реклама и рассылка превращается в пустой слив бюджета, т.к. прошлая ссылка уже не работает. И вот тут есть 2 выхода – откорректировать адрес ссылки вручную (на сайте интернет-магазина, но это отдельная тема для разговора), либо настроить 301 редирект со старого адреса на новый.

Теперь о том, как решить эту проблему через 301 редирект.

1. Необходимо убедиться, что редирект-плагин включен.

Для этого в админке выбираем Расширения => Менеджер плагинов.

Ищем в списке установленных плагинов «Система – Перенаправление» и включаем (если он выключен).

2. Проверяем «плохие» адреса.

В верхнем меню переходим в Компоненты => Перенаправление, там будет список всех “плохих” URL вашего Joomla-сайта.

3. Настраиваем переадресацию.

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

Т.е. для решения данной задачи хватает стандартного плагина Joomla, который идет с движком «с завода».

Настройка редиректа на OpenCart

Формирование адресов на OpenCart – это очень больная тема. А чтобы Вам было проще понять, насколько она на этом движке большая, просто взгляните на то, какой вид имеет адрес главной страницы:

site.com/index.php/?route=common/home

И это вместо site.com

Почему разработчики так эту проблему не решили – не понятно. Видимо, в этих «хвостах» зашифрованы послания тем, кто пытается через тайну Вселенной постичь тайну сокровищ Майя. Но т.к. среди простых землян таких нет (или есть?), то проблема перекладывается с разработчиков движка на программистов сайта.

Решить проблему можно несколькими способами:

Способ 1. В папке templates/common найти файлы header.tpl и footer.tpl и произвести в них замену кода с <?php echo $home; ?> на <?php echo $base; ?>

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

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

RewriteRule ^index\.php$ http://site.com/? [R=301,L]

Таким же (а именно – вторым) способом можно настроить редиректы со старых адресов категорий на новые. По умолчанию адреса ссылок в 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? [R=301,L]

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

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

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

RewriteRule katalog http://site.com/? [R=301,L]

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

Теперь поговорим о том, как не допускать ошибок при настройке 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-карты сайта.

Подпишитесь на обновления
Лучшей оценкой нашего труда является ваша подписка на новые публикации. Мы очень постараемся быть интересными и обещаем не спамить.
 

Комментарии к статье
seoonly.ru 03.05.2018
Спасибо!
Тим 04.05.2018
Статья крутая. Но на мобилке читать не айс. Сделайте адаптив, 2018 год все таки
Удивленная 04.05.2018
Тим, спасибо! Над адаптивом работаем. Знаем сие узкое место, исправимся.

(0)
РАССЫЛКА

Популярные статьи
Мы в соц сетях
Читайте также