htaccess — это конфигурационный файл веб-сервера Apache, позволяющий управлять работой веб-сервера и настройками сайта с помощью различных параметров (директив) без изменения основного конфигурационного файла веб-сервера.
Возможно пригодится - Гайд по работе с FTP
Правило №1. Файл .htaccess должен называться именно .htaccess, без каких-либо дополнительных расширений (например, .txt), иначе сервер не будет его распознавать и использовать.
Правило №2. Написанное ниже нужно вставить в самое начало .htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
Правило №3. В начале мелкие редиректы, потом глобальные
В файле всегда идут постраничные редиректы (с страницы на страницу), потом с раздела на раздел, а уже после глобальные правила (такие как с http на https, с www на без www и прочее).
Правило №4. Если что-то написано в #, то оно не учитывается
Если вы в начале любого правила напишите #, то такой редирект не сработает, так как он просто не будет учитываться. С помощью # пишите комментарии, чтобы другой SEO-специалист понял что за редирект вы сделали.
Правило №5. Создайте копию на компьютере перед редактированием
Убедитесь в том, что вы сохранили у себя на ПК резервную копию оригинального файла .htaccess, прежде чем вносить какие-либо изменения, чтобы можно было вернуть обратно.
Правило №6. Просто посмотрите на примере
Чтобы стало понятно что мы тут понаписали, проще увидеть пример и мы подготовили его для вас с подробным описанием.
Пример - просто нажми на этот текст
Надеюсь все понятно, если да, тогда полетели
Мы собрали базу самых нужных редиректов для сайтов, которые помогут каждому навсегда избавиться от дублей на своем сайте. Рекомендую добавить статью в закладки, так как материал очень полезный.
Если вам будет полезна информация, которая здесь находится, то буду благодарен каждому поставленному лайку. По возникающим вопросам/предложениям пишем в комментарии
Все возможные варианты редиректов:
#Обычный редирект с одной страницы на другую
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]
______________________________________________________________
#Редирект делает редиректы с страниц типа: ?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]
______________________________________________________________
#Вариант №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
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]
______________________________________________________________
Пользовательская страница ошибок(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
______________________________________________________________
Проблема
На OpenCart при настройке массовых правил происходит редирект на URL с index.php?_route_= и только потом на рабочий URL
Решение
В htaccess не правильно настроены порядок редиректов. Нельзя размещать директивы и правила после
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
Перенесите все правила, которые стоят ниже вышеуказанного правила, на самый верх файла.