Чтобы перенаправить только домашнюю страницу в HTTPS (и канонизировать поддомен www), добавьте в начало файла .htaccess
следующее:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^$ https://%1/ [R=302,L]
Обратите внимание, что это 302 (временное) перенаправление. Измените его на 301 (постоянный), если вы уверены, что он работает нормально, чтобы избежать проблем с кэшированием в браузере.
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Также необходимо изменить существующий редирект с www на не-www в конце файла, иначе он перенаправит домашнюю страницу обратно на HTTP
. Это также следует переместить в начало файла .htaccess
сразу после перенаправления HTTP-HTTPS.
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.+)$ http://%1/$1 [R=301,L]
Обратите внимание, что я изменил ^(.*)$
на ^(.+)$
, чтобы соответствовать 1 или более символам - таким образом избегая домашней страницы. Вы также можете упростить это до (.+)
(т.е. удалить якоря), если хотите. Regex по умолчанию жадный, якоря лишние.
Краткое описание
RewriteEngine On
# Only redirect homepage to HTTPS (and remove www subdomain)
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+) [NC]
RewriteRule ^$ https://%1/ [R=302,L]
# Remove www subdomain on other pages (HTTP only)
# >>> This is moved from the end of the htaccess file
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule (.+) http://%1/$1 [R=302,L]
# Remainder of htaccess file....
:
:
Очистите кеш браузера и измените 302
на 301
только после того, как подтвердите, что он работает нормально.
В сторону: Вы можете удалить директиву RewriteEngine
, которая появится позже в файле, если хотите. Это необязательно, только требуется , чтобы это произошло один раз. Быть на вершине, перед директивами mod_rewrite, логично (но не обязательно).