Эта статья рассказывает л настройке автоматического редиректа клиента сервера Apache на использование защищенного протокола HTTPS. Статья содержит примеры кода и рассказывает об особенностях применения.

Фрагменты кода htaccess для переадресации http на https

Есть несколько вариантов записи условия и правила переадресации.

Варианты условия для переадресации

Проверка того, что HTTPS не используется, делается по значению параметра %(HTTPS).

RewriteCond %{HTTPS} off [NC]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Или в другой форме записи:

RewriteCond %{HTTPS} !on [NC]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

Полностью фрагмент редиректа на https, включая строки для подключения модуля и включения замены, выглядит так:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTPS} !on [NC]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</IfModule>

Особенности внесения изменений в .htaccess

Есть несколько моментов, из-за которых корректный фрагмент кода не будет работать правильно, то есть ожидаемое перенаправление не произойдёт. Они связаны с тем, куда именно вставляется этот код.

Особенности .htaccess в WordPress

Особенность состоит в том, что WordPress имеет свой собственный файл .htaccess, который создаётся при установке и может изменяться при обновлении версии WordPress.

Директивы WordPress обозначены комментариями #BEGIN WordPress и #END WordPress.

Поэтому дополнительные директивы необходимо вставлять в файл .htaccess WordPress до комментария #BEGIN WordPress, например, так:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{HTTPS} !on [NC]
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
</IfModule>

# BEGIN WordPress
# Директивы (строки) между `BEGIN WordPress` и `END WordPress`
# созданы автоматически и подлежат изменению только через фильтры WordPress.
# Сделанные вручную изменения между этими маркерами будут перезаписаны.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>

# END WordPress

...

Особенности, связанные со структурой каталогов

Встречаются конфигурации веб-серверов с несколькими файлами .htaccess – если на веб-сервере используются CMS в подкаталогах:, например, в папке /blog/ находится блог на WordPress, а в папке /forum/ находится конференция PHPBB, то оказывается, что на сервере будет не один файл .htaccess, а несколько – в данном примере три.

/root
    .htaccess
    /blog
        .htaccess
    /download
    /forum
        .htaccess
    /picture

Файлы .htaccess в подкаталогах переопределяют директивы, заданные в файле .htaccess в каталоге более высокого уровня, поэтому директивы редиректа на https потребуется прописать не только в основном файле (в корневом каталоге), но и продублировать в других файлах .htaccess.

Проверка работы редиректа на https и решение проблем

Изменение файла .htaccess сопряжено с риском нарушить работу веб-сайта, поэтому следует обязательно проверить файл htaccess даже после небольших правок.

Первым делом нужно проверить код на синтаксические ошибки и опечатки. Все ошибки нужно исправить прежде, чем переходить к следующему шагу.

Затем следует протестировать фрагмент кода, отвечающий за редирект, и убедиться, что преобразование URL происходит корректно. После того, как тест будет пройдён, можно переходить к внесению изменений в файлы htaccess на сайте.

Вносить изменения, то есть добавить код редиректа, необходимо во все файлы .htaccess.Обновленные файлы лучше проверить на ошибки по ссылке выше.

И, наконец, остаётся проверить работу переадресации с обновленными файлами .htaccess. Это необходимо сделать для каждого каталога со своим .htaccess. То есть если на сайте три файла ,htaccess, как в примере выше, то нURL из корневого каталога сайта, из блога и из форума. На каждой из них должна произойти переадресация с http на https.

Если какой-то из .htaccess не сработал, проверьте, что код в него был добавлен правильно. Для WordPress важно, чтобы код был вставлен до строк WordPress.

После этого автоматический переход на https будет работать для всех страниц сайта.

Узнать больше

How directives are applied — Apache HTTP Server Tutorial: .htaccess files — описание, в каком порядке применяются директивы для нескольких .htaccess в разных каталогах.

Переадресация на https в htaccess, примеры и тестирование
Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *