- Редирект HTTP → HTTPS
- Редирект HTTPS → HTTP
- Редирект с www → БЕЗ WWW
- Редирект без www → С WWW
- 301 редирект с одного домена на другой
- Редирект "без слеш" на "со слешем" в Битрикс
- Убираем повторяющиеся слеши в конце URL
- Добавляем слеш, если его нет, и это не файл
- Добавляем слэш в конец URL
- Убираем слеши в конце URL для статических файлов (содержит точку)
- Убираем index.php в конце URL
- Добавить | убрать .html
- Редирект с index.php на саму папку для всех страниц сайта
- Метод борьбы с хотлинкингом
<IfModule mod_rewrite.c>
# Директива включает редиректы.
RewriteEngine On
# Без директивы (.*) = /$1 будет /var/wwww/site/web/$1 с директивой = /$1
RewriteBase /
# Разрешает переход по символическим ссылкам.
Options +FollowSymLinks
SetEnvIf X-HTTPS 1 HTTPS
RewriteBase /
RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
# или
RewriteCond %{HTTPS} !on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI}
# Проверяем наличие https в URL.
RewriteCond %{HTTPS} on
# Перенаправляем протокол на http.
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
# Редирект с www на БЕЗ WWW.
# Проверяем, содержит ли домен www (в начале URL)
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
# Перенаправляем URL на домен без www
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# или
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTP_HOST} !^www\.(.*) [NC] # Если домен не начинается с www
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] # Перенаправляем на домен c www
RewriteRule (.*) http://[имя_вашего_сайта]/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
#или
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
# Проверяем, повторяется ли слеш более двух раз
RewriteCond %{REQUEST_URI} ^(.*?)\/{2,}(.*?)$
# Исключаем все лишние слеши
RewriteRule . %1/%2 [L,R=301]
# или
# Убираем лишние слеши в URL
RewriteCond %{REQUEST_URI} ^(.*?)\/{2,}(.*?)$
RewriteRule . %1/%2 [L,R=301]
RewriteCond %{THE_REQUEST} //
RewriteRule .* /$0 [R=301,L]
# или
RewriteCond %{THE_REQUEST} //
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$0 [R=301,L]
Источник: https://qna.habr.com/q/232562
# Если слеша в конце нет.
RewriteCond %{REQUEST_URI} !(.*)/$
# Не является файлом.
RewriteCond %{REQUEST_FILENAME} !-f
# В URL нет точки (файл).
RewriteCond %{REQUEST_URI} !\..+$
# Добавляем слеш в конце.
RewriteRule ^(.*)$ $1/ [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !\..{1,10}$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [L,R=301]
# или
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
# или
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
# или
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
RewriteCond %{REQUEST_URI} \..+$ # Если файл содержит точку
RewriteCond %{REQUEST_FILENAME} !-d # И это не директория
RewriteCond %{REQUEST_FILENAME} -f # Является файлом
RewriteCond %{REQUEST_URI} ^(.+)/$ # И в конце URL есть слеш
RewriteRule ^(.+)/$ /$1 [R=301,L] # Исключить слеш
RewriteCond %{REQUEST_METHOD} =GET # Выявляем GET запрос в URL (не POST).
RewriteCond %{REQUEST_URI} ^(.*)/index\.php$ # URL cодержит index.php в конце.
RewriteRule ^(.*)$ %1/ [R=301,L] # Удалить index.php из URL.
# или
RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
RewriteRule ^(.*)index\.php$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html [R=301,L]
RewriteRule ^(.*)/$ /$1.html [R=301,L]
# или
RewriteBase /
RewriteRule (.*)\.html$ $1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^(.*)index\.php$ http://[имя_вашего_сайта]/$1 [R=301,L]
Понадобится служебный файл .htaccess, находящийся в корне файлов Вашего сайта, в котором нужно прописать следующие строчки кода:
RewriteCond %{HTTP_REFERER} !^$
# Список разрешенных ресурсов, вместо site.ru пропишите свой домен
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?__ВАШ_САЙТ__.ru.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yandex.ru [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google. [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?msn. [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yahoo. [NC]
RewriteCond %{HTTP_REFERER} !search?q=cache [NC]
# Список запрещенных форматов для хотлинка
RewriteRule \.(jpe?g|png|bmp|gif|css|zip|pdf|txt|doc)$ - [NC,F,L]
Происходит определение HTTP_REFERER клиента. Если это не поисковая система, соединение блокируется, выдавая 403 ошибку.
AddDefaultCharset utf-8
# Запрет листинга каталогов. Вернет 503 Forbidden. Можно разрешить локальный листинг, создавая .htaccess в нужной дирректории. Т.о. листинг распространяется и на подкаталоги:
Options -Indexes
# Осторожно и на свой риск. При запросе без указания расширения файла вернет одноименный файл с любым расширением. По умолчанию '-'
Options +Multiviews
# Переопределение индексного файла: чтобы сервер искал не index.*, а к-то другой (даже картинку)
DirectoryIndex another_file.php
# Стилизация листинга
IndexOptions FancyIndexing
# Добавляет в листинге данные для графы Description
IndexOptions FancyIndexing ScanHTMLTitles
# Позволяет скрывать файлы опр. расширений или опр. файлы в листинге
IndexIgnore *.zip *.rar hide_it.txt
# Пустой листинг
IndexIgnore *
# Для поддержки автономных веб-приложений файлу .appcache добавляется MIME-тип, чтобы сервер отправлял правильный файл-манифест
AddType text/cache-manifest .appcache