301 редиректы в .htaccess - Готовый список шаблонов

htaccess — это конфигурационный файл веб-сервера Apache, позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.

Возможно пригодится - Гайд по работе с FTP

Важная информация!

  1. После настройки глобальных правил редиректов (любые перенаправления, кроме редиректа со страницы на страницу) ставьте задачу на разработчика по проверке форм и корзины. Так как часто ломаются формы и клиент не получает заказы

  2. Не правьте файл .htaccess через административную панель сайта (админку), так как если сайт ляжет, то вы не сможете ничего править

Важные правила по настройке файла

Правило №1. Файл .htaccess должен называться именно .htaccess, без каких-либо дополнительных расширений (например, .txt), иначе сервер не будет его распознавать и использовать.

Правило №2. Написанное ниже нужно вставить в самое начало .htaccess

Options +FollowSymLinks RewriteEngine On RewriteBase /

Правило №3. В начале мелкие редиректы, потом глобальные

В файле всегда идут постраничные редиректы (с страницы на страницу), потом с раздела на раздел, а уже после глобальные правила (такие как с http на https, с www на без www и прочее).

Правило №4. Если что-то написано в #, то оно не учитывается

Если вы в начале любого правила напишите #, то такой редирект не сработает, так как он просто не будет учитываться. С помощью # пишите комментарии, чтобы другой SEO-специалист понял что за редирект вы сделали.

Правило №5. Создайте копию на компьютере перед редактированием

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

Правило №6. Просто посмотрите на примере

Чтобы стало понятно что мы тут понаписали, проще увидеть пример и мы подготовили его для вас с подробным описанием.

Надеюсь все понятно, если да, тогда полетели

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

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

Если вам будет полезна информация, которая здесь находится, то буду благодарен каждому поставленному лайку. По возникающим вопросам/предложениям пишем в комментарии

Все возможные варианты редиректов:

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

#Обычный редирект с одной страницы на другую Redirect 301 /old-stranitsa https://site.ru/new-stranitsa
#С 1 страницы на другую на MODX RewriteRule ^old-page/$ new-page/ [R=301,NC,L]
#С 1 страницы на другую в OpenCart RewriteCond %{QUERY_STRING} ^_route_=old-page/old-page/$ RewriteRule ^(.*)$ https://my-site.com/new-page/new-page/? [R=301,L]
#С страницы на другую для URL на кириллице на URL на латинице (ЕСЛИ ДОМЕН НА КИРИЛЛИЦЕ) Redirect 301 /ru/product/старая-страница/ https://xn--b1aghu1a.xn--p1acf/ru/product/novaya-stranicza/
#Перенаправление с URL на кириллице на URL на латинице Redirect 301 /старая-страница-русскими-буквами/ https://vash-site.ru/mew-url/

Редиректы, если в URL есть пробел

Чтобы в .htaccess работал редирект для URL в которых есть пробел ссылку нужно заключать в кавычки (без спецсимволов), т.е:

#Для WordPress и прочих CMS Redirect 301 "/old page" "https://site.ru/new-stranitsa"
#Для сайтов на MODX RewriteRule "^/?old-page/montazh cherepiczy instrukc$" "https://site.ru/new-page/" [R=301,L]

Редиректы с домена на домен

#Редирект с главной страницы на другой домен RewriteEngine On RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^(.*)$ https://site.ru/ [L,R=301]
#Редирект с домена на домен (дает переход с каждой страницы старого сайта на каждую страницу нового и НЕ РАБОТАЕТ ДЛЯ ГЛАВНОЙ) RewriteEngine On RewriteCond %{HTTP_HOST} old-site.ru RewriteRule (.*) https://new-site.ru/$1 [R=301,L]

Редиректы для URL с GET-параметрами

#Редирект делает редиректы с страниц типа: ?product_id=858 RewriteCond %{QUERY_STRING} (?:^|&)^product_id\=858(?:$|&) RewriteRule ^index\.php$ /catalog/new_page? [L,R=301]
#Редирект с GET-параметрами RewriteCond %{QUERY_STRING} (^|&)product_cat\=uncategorized($|&) RewriteRule ^$ /katalog
#Настройка редиректа с GET-параметром c страницы на страницу #url до параметра RewriteCond %{REQUEST_URI} ^/component/virtuemart/$ #то, что после параметра (вместо ?= ставится ^) RewriteCond %{QUERY_STRING} ^page=shop.browse&category_id=12 #новый url RewriteRule ^.*$ /arenda-gruzovogo-avto.html? [R=301,L]

Редирект страниц на https-версию

#Вариант №1 RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Вариант №2 RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Если не сработало, попробуйте варианты, которые указаны ниже

RewriteEngine On RewriteCond% {HTTPS} off RewriteRule (. *) Https: //% {HTTP_HOST}% {REQUEST_URI} [R = 301, L]
RewriteEngine On RewriteCond %{HTTPS} =off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

Редирект для слешей (/)

Убираем повторяющиеся слеши (/) в URL

RewriteCond %{THE_REQUEST} // RewriteCond %{QUERY_STRING} !http(s|):// RewriteRule .* /$0 [R=301,L]

Редирект с множественных слешей (/////) и http на 1 слеш (/) и https

RewriteCond %{THE_REQUEST} // RewriteRule .* /$0 [R=301,L]

Редирект с множественных слешей (/////) и на без слеша (/)

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

Автоматическая подстановка слеша (/) в конце адреса.

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

RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]

Добавляем слеш(/), если его нет, и это не файл.

*Не добавляйте на сайты на Elementor (WordPress)

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

Переадресация с www на без www и наоборот

Перенаправление домена с www на без www

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

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

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

Перенаправление домена с www на без www, если домен на русском

RewriteEngine On RewriteCond %{HTTP_HOST} ^www.xn--80adaxca8c.xn--p1ai$ [NC] RewriteRule ^(.*)$ https://xn--80adaxca8c.xn--p1ai/$1 [R=301,L]

Перенаправление всего домена одновременно с версии с www на версию без www и с HTTP на HTTPS

При использовании данного правила не используйте отдельные правила редиректов с http на https и www. В редких случаях из-за такого могут вовсе не работать все редиректы.

RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Прочие массовые редиректы

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

RewriteCond %{REQUEST_URI} ^(.*)/old-stratitha/(.*)$ RewriteRule ^(.*)$ %1/new-stratitha/%2 [R=301,L]

Убираем html на конце URL

RewriteEngine on RewriteBase / RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP RewriteRule ^([^.]+)\.html$ $1 [R=301,L] RewriteCond %{REQUEST_URI} !(\.[^./]+)$ RewriteCond %{REQUEST_fileNAME} !-d RewriteCond %{REQUEST_fileNAME} !-f RewriteRule (.*) /$1.html

Убираем index.php на конце URL

#Настройка редиректа с index.php на конце RewriteEngine On RewriteCond %{REQUEST_URI} ^/(.*?)/index\.php$ RewriteRule ^ /%1/ [R=301,L]

Не забываем заменять https://site.ru/ на адрес своего сайта, иначе редиректы не сработают!

#Вариант №2 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ https://site.ru/ [R=301,L]
#Вариант №3 RewriteCond %{REQUEST_URI} /index.php RewriteRule ^(.*)$ https://site.ru/ [R=301,L]

Массовый редирект одновременно с index.php и index.html

#Вариант №1 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTPS/ RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]
#Вариант №2 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/ RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]
#Вариант №3 RewriteCond %{REQUEST_URI} ^(.*)/index\.php$ RewriteRule ^(.*)index\.php$ https://%{HTTP_HOST}/$1 [R=301,L]
#Вариант №4 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(htm)\ HTTP/ RewriteRule ^(.*)index\.(htm)$ $1 [R=301,L]

Перенаправление в случае обновления веб-ресурса

*Вместо 14.124.354.80 - заменить на свой IP адресс.

RewriteEngine on RewriteCond %{REQUEST_URI} !/info.html$ RewriteCond %{REMOTE_HOST} !^14\.124\.354\.80 RewriteRule $ http://vash-sait.ru/info.html [R=302,L]

Защита от хотлинков (кражи контента)

#Вариант №1 RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9] \.)?vash-sait\.ru [NC] RewriteRule \.(gif|jpe?g|png)$ - [F,NC,L]
#Вариант №2 RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?ваш-домен.ru/.*$ [NC] RewriteRule .*.(gif|jpg|png|ico)$ - [F,L]

Настройка перенаправлений на страницы ошибок (4xx, 5xx)

Пользовательская страница ошибок(404)

*Вместо указанных страниц с .html указываем адрес страницы ошибки на сайте

ErrorDocument 404 "/404.html"

Другие варианты страниц ошибок

ErrorDocument 401 /errors401.html ErrorDocument 403 /errors403.html ErrorDocument 404 /errors404.html ErrorDocument 500 /errors505.html

Правило для удаления лишних цифр на конце URL

RewriteEngine On RewriteRule ^(.+?)/\d+/?$ /$1/ [R=301,L]

Редиректы с верхнего регистра в нижний

Редирект с верхнего регистра в нижний ТОЛЬКО ДЛЯ URL (картинки он не трогает)

*может сделать редирект с внутренних страниц на главную, поэтому проверяйте внимательно

RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].* RewriteCond %{REQUEST_URI} !(.*)\.jpg$ RewriteRule ^ https://%{HTTP_HOST}${lc:%{REQUEST_URI}} [L,R=301]

Редирект с URL в верхнем регистре на URL с нижним регистром

*Не всегда работает правильно и может создать цепочку редиректов. Если это произойдет прибегните к примеру №2

#Пример №1 RewriteCond expr "tolower(%{REQUEST_URI}) =~ /(.+)/" RewriteRule [A-Z] %1 [R=301,L]

Пример №2

Напишите в поддержку хостинга сообщение, которое указано ниже

Доброго дня! Для сайта - https://ваш-сайт.ru/

Необходимо настроить редирект для URL-адресов с верхнего регистра в нижний. Для корректного редиректа нужно изменить файл http.conf. У нас к нему доступа нет, но он есть у вас. Нужно добавить в http.conf

RewriteMap lc int:tolower

После чего добавить в .htaccess правило

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_URI} ^[^A-Z]*[A-Z].*

RewriteRule ^ https://%{HTTP_HOST}${lc:%{REQUEST_URI}} [L,R=301]

Андрей Павлович

Закрываем сайт от индексации

Способ ниже закрывает сайт отдельно для каждой поисковой системы. При парсинге с помощью утилит парсит 1 страницу и выдает 404 ошибку.

# Способ №1 закрывает от всех поисковых ботов SetEnvIfNoCase User-Agent .*googlebot.* search_robot SetEnvIfNoCase User-Agent .*yandex.* search_robot SetEnvIfNoCase User-Agent .*mail.* search_robot SetEnvIfNoCase User-Agent .*bingbot.* search_robot SetEnvIfNoCase User-Agent .*baiduspider.* search_robot SetEnvIfNoCase User-Agent .*yahoo.* search_robot SetEnvIfNoCase User-Agent .*parser.* search_robot Deny from env=search_robot
# Способ №2 (у меня не сработал) SetEnvIfNoCase User-Agent «^Googlebot» search_bot SetEnvIfNoCase User-Agent «^Yandex» search_bot SetEnvIfNoCase User-Agent «^Yahoo» search_bot SetEnvIfNoCase User-Agent «^Aport» search_bot SetEnvIfNoCase User-Agent «^msnbot» search_bot SetEnvIfNoCase User-Agent «^spider» search_bot SetEnvIfNoCase User-Agent «^Robot» search_bot SetEnvIfNoCase User-Agent «^php» search_bot SetEnvIfNoCase User-Agent «^Mail» search_bot SetEnvIfNoCase User-Agent «^bot» search_bot SetEnvIfNoCase User-Agent «^igdeSpyder» search_bot SetEnvIfNoCase User-Agent «^Snapbot» search_bot SetEnvIfNoCase User-Agent «^WordPress» search_bot SetEnvIfNoCase User-Agent «^BlogPulseLive» search_bot SetEnvIfNoCase User-Agent «^Parser» search_bot
# Правило ниже закрывает сайт для робота Яндекс SetEnvIfNoCase User-Agent .*yandex.* search_robot SetEnvIfNoCase User-Agent .*mail.* search_robot Deny from env=search_robot

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

Проблема

На OpenCart при настройке массовых правил происходит редирект на URL с index.php?_route_= и только потом на рабочий URL

Решение

В htaccess не правильно настроены порядок редиректов. Нельзя размещать директивы и правила после

RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

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

1010
17 комментариев

Спасибо за полезный материал! Сохраню себе, чтобы воспользоваться в случае необходимости )

1
Ответить

Опять htaccess, то есть для Apache. Nginx как будто не существует :)

1
Ответить
Ответить

А как будто есть смысл писать про Nginx, когда чаще всего именно Apache попадается. И в очередной раз, я просто свою базу опубликовал, мб кому полезно будет. Понадобится мне для Nginx собрать, соберу и поделюсь, но пока не было нужды :)

Ответить

Отличная шпаргалка получилась! Спасибо

1
Ответить

Рад, что понравилось. Пользуйтесь!

Ответить

А где самый важное правило, чтобы php работало на .html ?

Ответить