Следить за новостями:

Категории
Свежие записи
BrainFБлог

301 редирект. Популярные шаблоны.

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

Для того чтобы нижеизложенные шаблоны работали нужно перед их использованием прописать в файле .htaccess директивы для модуля mod_rewrite:

Options +FollowSymLinks
 RewriteEngine On
 RewriteBase /

Теперь можем использовать типичные правила редиректа:

префикс www

www.example.com и example.com в глазах поискового работа — абсолютно разные сайты, каждый со своими показателями. Для того чтобы не распылять вес, склеиваем эти адреса.
Редирект с адреса www на адрес без www

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

Редирект с адреса без www на адрес с www

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

Склейка индексной страницы с корнем сайта

Зачастую главная страница вашего сайта доступна по нескольким адресам: example.com/ и example.com/index.php или example.com/index.html

Чтобы склеить такие дубли, используем следующий шаблон:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
 RewriteRule ^index\.php$ http://example.com/ [R=301,L]

Склейка поддомена и папки

Редирект с поддомена на папку основного домена
Иногда возникает необходимость сделать 301 редирект с поддомена на папку сайта. Например у вас есть страница category.example.com/page/ и вам нужно склеить ее с дублирующей страницей example.com/category/page/

Прописывем в файле .htaccess поддомена:

RewriteCond %{HTTP_HOST} ^category\.example\.com [OR]
 RewriteCond %{HTTP_HOST} ^category\.example\.com
 RewriteRule ^(.*)$ http://example.com/category/$1 [L,R=301]

Редирект с папки основного домена на поддомен
При необходимости наоборот перенаправить с папки на поддомен:

RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
 RewriteRule ^category\/(.*)$ http://category.example.com/$1 [R=301,L]

Редирект с одних расширений файлов на другие

Если вам необходимо сменить расширение файла в адресе (например page.html на page.php) или убрать его совсем:

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

Редирект на другой сайт

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

RewriteCond %{HTTP_HOST} ^oldsite\.com
 RewriteRule ^(.*)$ http://newsite.com/$1 [R=301,L]

Все страницы домена oldsite.com будут перенаправлены на соответствующие страницы newsite.com.

301 Редирект динамических страниц

При модернизации динамического сайта и создании ЧПУ-адресов часто возникает необходимость перенаправить старые страницы с параметрами ID на новые с ЧПУ. Например, чтобы переадресовать страницу вида http://example.com/page.php?id=13 на новую страницу http://example.com/new-url/, используется следующая конструкция:

RewriteCond %{QUERY_STRING} ^id=13$
 RewriteRule ^/page.php$ http://example.com/new-url/ [L,R=301]

Добавляем слеш в конце адреса

Если у вас на сайте реализованы ЧПУ адреса тем или иным способом, то вероятно ваши ссылки могут работать либо со «/» на конце адреса либо без него одинаково. Добавим однозначности и добавим слеш ко всем адресам.

RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule ^(.*[^/])$ /$1/ [R=301,L]

Еще по теме

18 комментария к записи “301 редирект. Популярные шаблоны.

  1. Максим
    26.02.2013 18:49:21 Ответить

    Это очень ценная подборка 301го редиректа много статей блогеров читал на эту тему в основном делают на отвали — а здесь все по полкам с разрешения автора скопирую себе в блог конечно же со ссылкой на первоисточник )

    1. parmactep
      16.03.2013 23:36:17 Ответить

      Без проблем)) Кстати, планируется дополняющая статья на эту тему. Подписывайтесь чтобы не пропустить.

  2. Игорь
    22.09.2013 1:25:43 Ответить

    А подробнее про редирект динамических страниц где узнать? Что-то не работает. Либо для каждого адреса в отдельности вносить нужно?

    1. parmactep
      24.09.2013 15:27:07 Ответить

      Опишите что именно вы хотите сделать? Постараюсь вам помочь.

      1. Игорь
        24.09.2013 23:51:56 Ответить

        Спасибо.  Яша индексирует страницы с основными адресами(без ЧПУ) и выдаёт их как запрещённые в robots.txt. Так и есть. Если применить выше указанный код и набрать в браузере ссылку на страницу с ?p=xxxx, то перенаправления не происходит.

        1. parmactep
          25.09.2013 1:49:22 Ответить

          Я так понял у вас wordpress? Вероятно вам окажется полезной статья http://blog.brainf.net/wordpress/nastrojjka-chpu-v-wordpress/
          Если нет, то напишите мне на почту (она прийдет вместе с уведомлением об ответе) адрес сайта и постараемся решить проблему.

  3. Елена
    16.10.2014 17:15:29 Ответить

    Добрый день! Спасибо за статью! Переносим сайт на новый движок. И ни как не могe понять как правильно описать 301 редиректом страниц вордпреса, для передачи индексации строниц в поисковых водотах и для захода на сайт по старым выдачам в поиске. Написала два вида редиректа:один :RewriteRule ^(.*)price.php$ http://сайт.com.ua/price [R=301,L]второй:Redirect 301 /price.php http://сайт.com.ua/priceКакой из вариантов лучше для вордпреса понять не могу….И в конце адресов страниц у меня нет расширения. Увидела на сайтах примеры написания 301 редиректе со слешем в конце. Это принципиально или возможен вариант и так, и так? Робот воспримет строку без расширения и слеша? У меня в «Постоянных ссылках» стоит /%postname%, без слеша в конце. Я вообще хотела там поставить расширение, т.е. /%postname%.php, но не знала как сработает вордпресс и не будет ли для него это уже слишком. А таким образом у меня вообще б сохранилась старая адресация и редиректа не надо было б. ;-)Заранее спасибо за помощь!

    1. parmactep
      16.10.2014 20:34:10 Ответить

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

  4. Елена
    17.10.2014 15:08:08 Ответить

    Я пока плохо знаю программный код вордпресса, чтоб быть уверенной, что указав /%postname%.php в настройке постоянных ссылок, он не начнет конфликтовать, генерируя страницы с базы. У него выполнемые файыл пхп, и страницы записей тоже пхп? Вордпресс не глюканет?

    1. parmactep
      17.10.2014 16:33:02 Ответить

      Ну а в случае если вы не зададите расширение ваш сервер будет искать файл без расширения, а вслучае со слешем в конце адреса будет искать директорию и файл index.php в ней.
      Вы же используете mod_rewrite (скорее всего) и задаете веб-серверу правило — при отсутствии файла или директории передавать управление скрипту index.php из корневой директории. А УРЛ передаете этому скрипту в качестве параметра. И ему собственно без разницы будет в этом параметре .php в конце или нет.

  5. SevenEl
    19.02.2015 17:32:30 Ответить

    А если сайт полностью переехал на новый домен и хостинг, достаочно ли будет прописать только  RewriteCond %{HTTP_HOST} ^oldsite\.com RewriteRule ^(.*)$ http://newsite.com/$1 [R=301,L]Или же надо прописывать все варианты напсиания старого адреса: с www, без www, 

    1. parmactep
      27.03.2015 17:12:50 Ответить

      Можно сделать RewriteCond %{HTTP_HOST} ^(.*)oldsite\.com в таком случае все запросы со старого домена будут редиректиться на новый, в не зависимости от поддомена.

  6. Андрей
    04.05.2015 20:38:17 Ответить

    Помогите, пожалуйста!Уже больше недели мучаюсь, не могу найти инфу.Нужно сделать переадресацию со страницы сайта на поддомен:http://x-vanna.com.ua/te >>на>> http://te.x-vanna.com.uaСуть в том, что страница проиндексирована и на неё регулярно заходят посетители. Но теперь возникла необходимость в создании отдельного поддомена вместо страницы.Так выглядит файл htaccess выглядит так:# BEGIN WordPress<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /RewriteRule ^index\.php$ — [L]RewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule . /index.php [L]</IfModule># END WordPressЧто куда прописывать? Пробовал разные варианты, пока не получается 🙁

      1. Андрей
        15.05.2015 22:51:59 Ответить

        Спасибо!Проблему решил при помощи плагина: Quick Page/Post Redirect Plugin

  7. Александр
    20.04.2016 11:45:31 Ответить

    Как сделать обратно этому: «Зачастую главная страница вашего сайта доступна по нескольким
    адресам: example.com/ и example.com/index.php или example.com/index.html»  —   нужно чтобы все эти варианты приводили к example.com/index.php — как это сделать?

  8. Роман
    13.01.2017 21:49:53 Ответить

    Помогите пожалуйста с дублями! Не могу понять как мне [ R=301, L] сделать. По разному пробовал, но никак. domen-moy.ru/domen-moy.ru/statya/После слеша возможна подстановка поиска ?s=чайник&submit=Поиск Хочу чтобы ссылки могли состоять только из букв нижнего регистра и знака (-)  , и все символы и спецсимволы после слеша редиректили на активную ссылку, Но есть строка поиска после слеша (ее надо исключить чтобы эту строку не обрезало вместе с остальными символами), а внутри строки поиска появляется текст при поиске по сайту, там также условие чтоб только буквы нижнего регистра были, но уже без знака (-).Сайт на wordpress.

  9. Роман
    13.01.2017 21:55:28 Ответить

    Отредактировал для читабельности…Помогите пожалуйста с дублями! Не могу понять как мне [ R=301, L] сделать. По разному пробовал, но никак. domen-moy.ru/  domen-moy.ru/statya/  После слеша возможна подстановка поиска        ?s=чайник&submit=Поиск   Хочу чтобы ссылки могли состоять только из букв нижнего регистра и знака (-)  , и все символы и спецсимволы после слеша редиректили на активную ссылку, Но есть строка поиска после слеша (ее надо исключить чтобы эту строку не обрезало вместе с остальными символами), а внутри строки поиска появляется текст при поиске по сайту, там также условие чтоб только буквы нижнего регистра были, но уже без знака (-).  Сайт на wordpress.

Ваш комментарий
выберите имя