Skip to content

Instantly share code, notes, and snippets.

@Wegazz
Last active July 19, 2020 09:33
Show Gist options
  • Save Wegazz/14f050c7c2acb5f27f0b0fb6ae0855c2 to your computer and use it in GitHub Desktop.
Save Wegazz/14f050c7c2acb5f27f0b0fb6ae0855c2 to your computer and use it in GitHub Desktop.
Стандартный .htaccess подходящий наверное для большинства случаев.
############################################################################
#### Cтандартный .htaccess ####
############################################################################
RewriteEngine On
# Директива включает редиректы.
RewriteBase /
# Без директивы (.*) = /$1 будет /var/wwww/site/web/$1 с директивой = /$1
Options +FollowSymLinks
# Разрешает переход по символическим ссылкам.
############################################################################
#### Перенаправляем протокол http на https ####
############################################################################
#### Отключено, так как правило ниже перенаправляет.
# 1. Редирект всего, что не на 443 порту (раскоментировать директивы пункта 1)
# RewriteCond %{SERVER_PORT} !^443$
# Проверяем наличие http в URL.
# RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Перенаправляем протокол на https.
############################################################################
#### Выбор основного зеркала (или с www или без www) ####
#### С перенаправлением на (http или https) ####
############################################################################
# 1. Редирект с www на без www. (раскоментировать директивы пункта 1)
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
# Проверяем, содержит ли домен www (в начале URL).
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
# Перенаправляем URL на домен без www.
# (http или https) прописать нужное.
####
# 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 %{THE_REQUEST} //
RewriteCond %{THE_REQUEST} (//|/?)
# Проверяем, повторяется ли слеш (//) или (/?) более одного раза?
RewriteRule .* /$0 [R=301,L]
# Исключаем все лишние слеши и вопросительные знаки.
####
# Не рабочий метод метод (раскоментировать директивы пункта)
# 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.(html|php) если они есть в конце URL ####
############################################################################
RewriteCond %{REQUEST_METHOD} =GET
# Выявляем GET запрос в URL (не POST).
RewriteCond %{REQUEST_URI} ^(.*)/index\.(html|php)$
# URL cодержит index.(html|php) в конце.
RewriteRule ^(.*)$ %1/ [R=301,L]
# Удалить index.php из URL.
############################################################################
#### Конец общей части, далее следует собственные директивы .htaccess ####
############################################################################
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment