Skip to content

Instantly share code, notes, and snippets.

@alex28742
Last active October 14, 2024 14:21
Show Gist options
  • Save alex28742/960eda6a7cf675990a964e321de0edf4 to your computer and use it in GitHub Desktop.
Save alex28742/960eda6a7cf675990a964e321de0edf4 to your computer and use it in GitHub Desktop.
htaccess
Используемые символы и значения:
========================================================
. – точка, заменяет любой символ (кроме символа перевода строки /n), но только один;
^ – спецсимвол начала строки;
() – группировка;
$ – спецсимвол конца строки;
[] - позволяет указать символы, которые могут встречаться на этом месте в строке.
можно перечислять символы подряд или указать даипазон через тире.
[^] - значение можно инвертировать, если после первой скобки указать символ ^
Так можно указать символы, которых не должно быть на этом месте в строке.
! – спецсимвол отрицания;
\ – «экранирующий» слеш, следующий символ после него считается обычным, а не спецсимволом.
\d - любая цифра
\D - не цифра
\w - любая латинская буква, цифра или знак подчеркивания
\W - Не латинская буква не цифра и не знак подчеркивания.
\s - любой непечатный символ (пробел, табуляция, перевод страницы, новая строка или перевод каретки.)
\S - Не непечатный символ
{n} - в точности n вхождений предыдущего символа или подвыражения в строку.
{n,m} - не менее n выражений и не более m выражений. Цифры указываются через запятую без пробела.
n|m - один из символов n или m
Каждая группа символов соответствующая подвыражению сохраняется в памяти. В дальнейшем группу символов можно извлечь, указав после символа $ номер скобки
пример: AliasMatch ^/manual(?:/(?:de|en|es|fr|ru))?(/.*)?$ "C:/Apache2/manual$1"
Модификаторы – применяются после обычных, спецсимволов или групп. С помощью них расширяется возможность использования шаблонов для срабатывания правил.
=======================================================
* – повторяется от 0 до 65536 раз;
? – символ повторяется 0 или 1 раз;
+ – повторяется от 1 до 65536 раз.
Флаги предназначены, чтобы задать дополнительные опции для используемого правила. Их перечисления осуществляется в квадратных скобках через запятую, например: [NC] или [R=301,L].
=======================================================
NC — флаг NoCase, который отключает проверку регистра символов;
R — флаг Redirect, который останавливает процесс изменения URL-адреса и возвращает результат. В основном он используется со значением R=301, но так же применяется и для других временных перенаправлений, например 302, MOVED TEMPORARY;
L — флаг Last, который используется для остановки формирования URL-адреса и строка считается окончательной.
############################################################################
#### Cтандартный .htaccess для проектов студии Клондайк, версия 2.3 ####
############################################################################
RewriteEngine On
# Директива включает редиректы.
RewriteBase /
# Без директивы (.*) = /$1 будет /var/wwww/site/web/$1 с директивой = /$1
Options +FollowSymLinks
# Разрешает переход по символическим ссылкам.
############################################################################
#### Перенаправляем протокол https на http ####
############################################################################
RewriteCond %{HTTPS} on
# Проверяем наличие https в URL.
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}
# Перенаправляем протокол на http.
############################################################################
#### Выбор основного зеркала (или с www или без www) ####
############################################################################
# 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
#RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
# Проверяем, содержит ли домен www (в начале URL).
#RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
# Перенаправляем URL на домен без www.
####
# 2. Редирект без www на www. (раскоментировать директивы пункта 2)
#RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
# Проверяем, не содержит ли домен www (в начале URL).
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
# Перенаправляем URL на домен c www.
############################################################################
#### Убираем повторяющиеся слеши (/) в URL ####
############################################################################
RewriteCond %{REQUEST_URI} ^(.*)/{2,}(.*)$
# Проверяем, повторяется ли слеш (//) более двух раз.
RewriteRule . %1/%2 [R=301,L]
# Исключаем все лишние слеши.
############################################################################
#### Убираем слеши в конце URL для статических файлов (содержит точку) ####
############################################################################
RewriteCond %{REQUEST_URI} \..+$
# Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d
# И это не директория.
RewriteCond %{REQUEST_FILENAME} -f
# Является файлом.
RewriteCond %{REQUEST_URI} ^(.+)/$
# И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]
# Исключить слеш.
############################################################################
#### Добавляем слеш(/), если его нет, и это не файл. ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
# Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
# Не является файлом.
RewriteCond %{REQUEST_URI} !\..+$
# В URL нет точки (файл).
RewriteRule ^(.*)$ $1/ [L,R=301]
# Добавляем слеш в конце.
############################################################################
#### Убираем 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.
############################################################################
#### Конец общей части, далее следует собственные директивы .htaccess ####
############################################################################
Рерайт с без слеша на слеш в конце
Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.html$
RewriteRule (.+) $1/ [R=301,L]
Убираю лишний слеш в конце
RewriteCond %{THE_REQUEST} ([^\s]*)\/{2,}(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]
Включение gzp сжатия http://www.internet-technologies.ru/articles/article_2866.html
# сжатие text, html, javascript, css, xml:
<ifModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>
Проверка работает ли сжатие: http://www.gidnetwork.com/tools/gzip-test.php
#Настройка кеша браузера
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/jpeg "access plus 3 day"
ExpiresByType image/gif "access plus 3 day"
ExpiresByType image/png "access plus 3 day"
ExpiresByType text/css "access plus 3 day"
ExpiresByType application/javascript "access plus 3 day"
</IfModule>
# Cashe
<ifModule mod_expires.c>
ExpiresActive On
#по умолчанию кеш в 5 секунд
ExpiresDefault "access plus 5 seconds"
#кэшировать флэш и изображения на месяц
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
#кэшировать css, javascript и текстовые файлы на одну неделю
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 604800 seconds"
ExpiresByType application/javascript "access plus 604800 seconds"
ExpiresByType application/x-javascript "access plus 604800 seconds"
#кэшировать html и htm файлы на один день
ExpiresByType text/html "access plus 43200 seconds"
#кэшировать xml файлы на десять минут
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
#c www на без www
# www.* -> .*
RewriteCond %{HTTP_HOST} ^www.es-clinic.ru$ [NC]
RewriteRule ^(.*)$ http://es-clinic.ru/$1 [R=301,L]
#c .html на /
# .html -> /
RewriteBase /
RewriteRule ^(.*)\.html$ $1/ [R=301,L]
# с без слеша на слеш
# _ -> /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ /$1/ [R=301,L]
#с http на https *** (см строку 248!!!)
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]
# c https на http по инструкции reg.ru
#RewriteEngine On
#RewriteCond %{SERVER_PORT} ^443$ [OR]
#RewriteCond %{HTTPS} =on
#RewriteRule ^(.*)$ http://stroi-gazon.ru/$1 [R=301,L]
Удалить повторяющиеся слеши в URL если их блольше чем 1
RewriteCond %{THE_REQUEST} //
# Проверяем, повторяется ли слеш (//) более двух раз.
RewriteRule .* /$0 [R=301,L]
# Исключаем все лишние слеши.
редирект с /index
RewriteCond %{REQUEST_URI} /index$
RewriteRule ^(.*)$ https://petkorma.ru/ [R=301,L]
-----------------
#https на http (по старым ссылкам https:// браузер будет отдавать предупреждение!!)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} https
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
-----------------
***Важно!!!
Правило RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] должно стоять ниже перенаправления на https
-----------------
#RewriteRule ^catalog/ryba-zamorozhennaya/(.*) /catalog/ryba/ryba-zamorozhennaya/$1 [R=301,L]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment