Я хочу перенаправлять весь трафик на https. В URL-адресе могут быть поддомены и подпути, которые должны оставаться неизменными. Пример:
http://subdomain.myDomain.me -> https://subdomain.myDomain.me
http://myDomain.me/subpath -> https://myDomain.me/subpath
http://subdomain.myDomain.me/subpath -> https://subdomain.myDomain.me/subpath
Я пробовал примеры в этот аккуратный оценщик (ссылка с Вот) со следующим кодом:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https:/$1
В оценщике все нормально. Реальный виртуальный хост выглядит так:
<virtualHost *:80>
ServerName myDomain.me
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https:/$1
</VirtualHost>
При попытке доступа к реальному сайту происходит следующее:
http://subdomain.myDomain.me -> http://subdomain.myDomain.me # fail - no https
http://myDomain.me/subpath -> https://myDomain.mesubpath # fail - subpath appended to top-level domain
http://subdomain.myDomain.me/subpath -> https://subdomain.myDomain.me/subpath # success
Что не так с этой перезаписью?
RewriteEngine On
#RewriteCond %{HTTPS} off # you can skip this if you want to redirect everything
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NC]
Если это не работает, попробуйте:
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}/$1 [R=301,L,NC]
Не забудьте отправить R=301
флаг, чтобы сделать перенаправление постоянным.
Правильное правило следующее.
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Однако это не рекомендуемый метод для перенаправления HTTP-запросов на HTTPS. Предпочтительный метод - использовать перенаправление в вашем конфите Apache, чтобы указать на сайт с поддержкой SSL.
Вы можете узнать больше о предпочтительном методе на вики-сайт Apache Httpd.