Skip to content

Instantly share code, notes, and snippets.

@if0rest
Last active August 30, 2021 13:13
Show Gist options
  • Save if0rest/4134ddd25e8a4ec544d3739a5b6d7633 to your computer and use it in GitHub Desktop.
Save if0rest/4134ddd25e8a4ec544d3739a5b6d7633 to your computer and use it in GitHub Desktop.

<IfModule mod_rewrite.c>
# Директива включает редиректы.
   RewriteEngine On
# Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
   RewriteBase /
# Разрешает переход по символическим ссылкам.
   Options +FollowSymLinks

Редирект HTTP → HTTPS

   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 → HTTP

# Проверяем наличие https в URL.
   RewriteCond %{HTTPS} on
# Перенаправляем протокол на http.
   RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}

Редирект с www → БЕЗ WWW

# Редирект с 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]

Редирект без www → С WWW

   RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]                   # Если домен не начинается с www
   RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]     # Перенаправляем на домен c www

301 редирект с одного домена на другой

   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]

Убираем повторяющиеся слеши в конце URL

   # Проверяем, повторяется ли слеш более двух раз
   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]

Добавляем слэш в конец URL

   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]

Убираем слеши в конце URL для статических файлов (содержит точку)

   RewriteCond %{REQUEST_URI} \..+$             # Если файл содержит точку
   RewriteCond %{REQUEST_FILENAME} !-d          # И это не директория
   RewriteCond %{REQUEST_FILENAME} -f           # Является файлом
   RewriteCond %{REQUEST_URI} ^(.+)/$           # И в конце URL есть слеш
   RewriteRule ^(.+)/$ /$1 [R=301,L]            # Исключить слеш

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

   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]

Добавить | убрать .html

   RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
   RewriteRule .* %1.html [R=301,L]
   RewriteRule ^(.*)/$ /$1.html [R=301,L]
# или
   RewriteBase /
   RewriteRule (.*)\.html$ $1 [R=301,L]

Редирект с index.php на саму папку для всех страниц сайта

   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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment