Нечасто, но случается необходимость в переводе сайта с незащищенного протокола на https по гуманистическим причинам или для оптимизации под требования поисковых систем. При этом могут возникнуть трудности, например на WordPress на внутренних страницах не срабатывает перенаправление на https.
Мы собрали несколько вариантов правил для .htacces, которые помогут решить эту проблему. Это рабочие варианты, но они могут не срабатывать из-за различий в настройках хостинга, поэтому нужный вариант придется определять перебором.
Прописывать правила нужно в начале файла либо перед правилами WordPress.
Вариант 1:
RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]
Вариант 2:
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Вариант 3:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Вариант 4:
RewriteEngine on
SetEnvIf X-Forwarded-Proto https SERVER_PORT=443
SetEnvIf X-Forwarded-Proto https HTTPS=on
RewriteCond %{HTTP:HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
Вариант 5:
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Вариант 6 (замените site.ru на свой адрес):
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site.ru[nc]
RewriteRule ^(.*)$ https://site.ru/$1 [r=301,nc]
Вариант 7:
RewriteEngine On
RewriteCond %{HTTP:SSL} !1
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301]