Назад | Перейти на главную страницу

Перенаправить на https, сохраняя URL без изменений / полного

Я хочу перенаправлять весь трафик на 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.