{"id":14284,"url":"\/distributions\/14284\/click?bit=1&hash=82a231c769d1e10ea56c30ae286f090fbb4a445600cfa9e05037db7a74b1dda9","title":"\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u0430\u043d\u0446\u044b \u0441 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438","buttonText":"","imageUuid":""}

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

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

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

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

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

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

Правила по настройке файла

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

Options +FollowSymLinks RewriteEngine On RewriteBase /

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

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

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

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

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

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

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

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

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

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

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

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

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

Редирект с 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]
#Редирект с 1 страницы на другую для URL и домена на кириллице на URL на латинице Redirect 301 /ru/product/старая-страница/ https://xn--b1aghu1a.xn--p1acf/ru/product/novaya-stranicza/

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

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

#Для 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

RewriteEngine On RewriteCond %{HTTP_HOST} ^www.vash-sait\.ru$ [NC] RewriteRule ^(.*)$ https://vash-sait.ru/$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

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

#Вариант №1 RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ https://site.ru/ [R=301,L]
#Вариант №2 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 (картинки он не трогает)

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

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_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]

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

0
10 комментариев
Написать комментарий...
Наталья Гришанова

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

Ответить
Развернуть ветку
Чайка О.

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

Ответить
Развернуть ветку
Dani4 Seo
Ответить
Развернуть ветку
Андрей Павлович
Автор

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

Ответить
Развернуть ветку
Чайка О.

Понятно.

Ответить
Развернуть ветку
В А

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

Ответить
Развернуть ветку
Андрей Павлович
Автор

Не сталкивался, поэтому его здесь нет. Ещё раз повторяю, что это просто то, что помогало мне и я решил это опубликовать в открытый доступ. Если есть что добавить, милости прошу. Пишите сюда, я добавлю в статью

Ответить
Развернуть ветку
Dani4 Seo

Годно

Ответить
Развернуть ветку
Михаил Мицкус

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

Ответить
Развернуть ветку
Засохший Дождевик

можно пояснить за правило #2?
почему именно такой порядок?

Ответить
Развернуть ветку
7 комментариев
Раскрывать всегда