30+ примеров настройки 301 редиректа в .htaccess

30+ примеров настройки 301 редиректа в .htaccess

23.06.2017

Популярные примеры правильной настройки 301 редиректа в файле .htaccess. Советы по добавлению редиректов.

Полезные советы

  • Современные браузеры по умолчанию используют кеширование для редиректов. Чтобы проверить работу редиректа необходимо очистить кеш в браузере или использовать любой сторонний сервис по проверке кода ответа сервера.
  • Нежелательно создавать цепочки редиректов. При медленной работе сервера это вызовет недовольство пользователя. Поисковые роботы также не любят последовательные редиректы - вес исходной страницы может не передаться.
  • При составлении файла .htaccess простые директивы должны идти раньше сложных, которые распространяются на весь сайт. Такая компоновка будет более удобной при работе с файлом и поможет избежать путаницы.

Наиболее популярные правила

Приведенные примеры работают для серверов функционирующих на APACHE, для NGINX настройки в файле .htaccess работать не будут. В примерах используется %{QUERY} - так обозначается часть URL, которая следует после знака вопроса. Правила для редиректа срабатывают только при условии соответствия правилу указанному в редиректе.

При настройке правила редиректов в файле .htaccess все правила необходимо указывать после указанных двух строк, либо просто добавьте их:

Options +FollowSymLinks
RewriteEngine On

301 редирект все страниц без WWW на страницы с WWW

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

Обратный редирект со страниц с WWW на страницы без WWW

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

301 редирект с одной страницы на другую

Redirect 301 /oldpage.html http://mysite.ru/newpage.html

Переадресация для разделов через RewriteRule

RewriteRule ^papka /papka-new/$1 [R=301,L]

301 редирект для страниц имеющих Get-параметры в URL

Для наглядности примера допустим адрес страницы имеет вид http://mysite.ru/catalog/index.php?IBLOCK_ID=5&SECTION_ID=15. Следующее правило будет делать переадресацию:

RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=15$ [NC]
RewriteRule ^catalog/index\.php$ /newcatalog/? [R=301,L]

Иногда необходимо настроить редирект для изменяющихся Get-параметров, например в текущем примере динамическим параметром будет SECTION_ID:

RewriteCond %{QUERY} ^IBLOCK_ID=5&SECTION_ID=(.*)$ [NC]
RewriteRule ^catalog/index\.php$ /newcatalog/? [R=301,L]

Переадресация со страниц без значения Get-параметра

Например адрес страницы имеет вид - http://mysite.ru/?addon, тогда редирект будет следующим:

RewriteCond %{QUERY} ^addon$ [NC] 
RewriteRule ^$ /? [R=301,L]

Переадресация одного адреса, без вложенных адресов

Например довольно часто необходимо настроить переадресацию со страницы раздела http:/site.ru/razdel/, однако прочие страницы в данном разделе должны работать без редиректа, например страница http://mysite.ru/razdel/section.php?SECTION_ID=1. Для этого нужно добавить всего один символ - $.

RewriteRule ^razdel/$ http://mysite.ru/new-razdel/ [R=301,L]

Настройка кириллических доменов .РФ

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

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

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

Правило для доменов .РФ

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

Редирект на папки со слешем на конце

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://mysite.ru/$1/ [L,R=301]

Редирект на папку без слеша - убираем слеш на конце

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ http://www.site.ru/$1 [R=301,L]

Переадресация с домена в папку другого сайта

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

Редирект со всех страниц кроме определенной папки

Для примера возьмем в исключение папку панели администратора в CMS Bitrix

RewriteRule ^bitrix/ /bitrix/admin/ [L,R=301] 
RewriteRule ^(.*)$ http://mysite.ru/ [L,R=301]

Переадресация всех файлов папки на конкретный файл

RewriteRule ^papka(.*)$ /my-file.html [L,R=301]

Переадресация файлов папки на другой файл с исключением

RewriteRule ^papka/file.html /new-file.html [L,R=301]
RewriteRule ^papka(.*)$ /my-file.html [L,R=301]

Редирект замены расширений файлов - с html на php

RedirectMatch 301 (.*)\.html$ http://newsite.ru$1.php

Указываем порядок загрузки индексных файлов в корне

DirectoryIndex index.php index.html index.htm index.shtml

Редирект с index.php на корень сайта

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

Редирект всех индексных страниц на корень

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

Переадресация с поддомена на основной домен

RewriteCond %{HTTP_HOST} ^abc.mysite.ru$ [NC] 
RewriteRule ^(.*)$ http://mysite.ru%{REQUEST_URI} [R=301,NC,L,QSA]

Редирект страницы из различных директорий

Если в разных папках сайта лежит файл с одинаковым названием, то настроить переадресацию этих файлов на один.

RewriteRule [^abc]/nash-file.php /nash-file.php [R=301,L]

Создаем ЧПУ-копию динамических страниц

Для страницы появится обычный URL без передачи Get-параметров.

RewriteRule ^catalog/okno/?$ /firma/okna/detail.php?ID=123 [NC,L]

Переадресация с https на http

Необходимое правило для решения проблемы с дублями страниц в поисковых системах.

RewriteCond %{HTTPS} "on"
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

Настройка ответа 403 для спама по REFERER

Данное правило позволяет не пускать на сайт спамный трафик с других сайтов:

RewriteCond %{HTTP_REFERER} ref-spam-site.ru [NC,OR] 
RewriteCond %{HTTP_REFERER} another-ref-spam.ru [NC]
RewriteRule .* - [F]

Обработка ошибки 404 в .htaccess

Для поисковых систем очень важно получать код ответа 404 для несуществующих страниц

ErrorDocument 404 /404-for-me.php

Особенности настройки

Следует помнить, что все правила выполняются в .htaccess в порядке следования их в файле, поэтому необходимо следить за очередностью правил.

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

Включение редиректа для определенных User Agent

Например редирект на мобильную версию для планшетов и смартфонов:

RewriteCond %{HTTP_USER_AGENT} (iPad|ipad|iphone|iPhone|ipod|iPod|android|midp|j2me|symbian|series\ 60|symbos|windows\ mobile|windows\ ce|ppc|smartphone|blackberry|mtk|bada|windows\ phone) [NC]  
RewriteRule (.*) http://m.mysite.ru/ [L,R=301]

Настройка редиректов для всех поисковых роботов

RewriteCond %{HTTP_USER_AGENT} !(accoona|ia_archiver|antabot|ask\ jeeves|baidu|dcpbot |eltaindexer|feedfetcher|gamespy|gigabot|googlebot |gsa-crawler|grub-client|gulper|slurp|mihalism|msnbot|worldindexer |ooyyo|pagebull|scooter|w3c_validator|jigsaw|webalta|yahoofeedseeker |yahoo!\ slurp|mmcrawler|yandexbot|yandeximages |yandexvideo|yandexmedia|yandexblogs|yandexaddurl|yandexfavicons |yandexdirect|yandexmetrika|yandexcatalog|yandexnews |yandeximageresizer) [NC] 
RewriteRule (.*) http://no-rank-site.ru/ [L,R=301]

Синтаксис и символы

  • . — Точка означает любой символ.
  • [abc] — перечень символов, совпадающих с буквами a, b, или с.
  • [^abc] — перечень символов, не входящих в диапазон. Условию соответствует любой символ, кроме a, b, с.
  • * — предыдущий символ может повторяться 0 и более раз.
  • [abc]* — найти символы из заданного набора идущие подряд.
  • [^abc]* — обратная операция.
  • .* — замена любого набора символов. ".*" — найти все подстроки между кавычками.
  • ^ — обознает начало строки (при использовании в начале выражения).
  • $ — конец строки.
  • \w — буква, цифра или подчёркивание _.
  • \d — любая цифра.
  • \D — любой символ, кроме цифр.
  • [0-9] — указание на любую цифру.
  • [a-z] — указание на любую букву от a до z с нижним регистром.
  • [A-Z] — указание на любую букву от A до Z с верхним регистром.
  • [a-zA-Z] — любая буква от a до Z, регистр не важен.
  • [a-Z] — тоже самое, только короче.

Флаги для доп. опций

  • NC — NoCase отключает проверку регистра символов при срабатывании правила.
  • R — Redirect останавливает изменение URL-адреса и возвращает результат. Самое популярное значение R=301, однако встречаются и другие для временных редиректов (302, MOVED TEMPORARY).
  • L — Last останавливает создание URL-адреса и строка считается окончательной.