Shoora
5/3/2019 - 6:09 AM

htaccess

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

-----------------