Workspace Digital Awards 2025 — престижнейшая международная премия в сфере диджитал. Принять участие!
Назад
#SEO

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

54 
 

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/(.*)$


Разместите
тендер бесплатно

Наша система сама подберет вам исполнителей на услуги, связанные с разработкой сайта или приложения, поисковой оптимизацией, контекстной рекламой, маркетингом, SMM и PR.

Заполнить заявку 12335 тендеров
проведено за восемь лет работы нашего сайта.


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]

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





Выскажите мнение
Авторизуйтесь, чтобы добавить свой комментарий.




55

Лучшие статьи

Поделиться: 0 0 0