Как переключить виртуальный хост apache с http на https через conf-файл apache? - PullRequest
0 голосов
/ 30 октября 2018

Мой файл конфигурации Apache 2.4, как показано ниже:

Listen 80
Listen 443 https

NameVirtualHost *:443
#
<VirtualHost *:443>
ServerAdmin admin@example.com
DocumentRoot "/home/websites/example/www"
ServerName example.com
ServerAlias www.example.com

SSLEngine on
SSLCertificateFile "/path/to/www.example.com.cert"
SSLCertificateKeyFile "/path/to/www.example.com.key"
# HSTS (mod_headers is required) (63072000 seconds = 2years)
Header always set Strict-Transport-Security "max-age=63072000;includeSubDomains;"

RewriteEngine On
RewriteCond %{HTTP:Host} ^example.com$
RewriteRule (.*) http://www.example.com$1 [NC,R=301]

RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

</VirtualHost>  

Моя мысль:
Что касается <VirtualHost *:443>, то любая настройка в пределах <VirtualHost действует только тогда, когда Apache слушает порт 443, тогда RewriteCond %{HTTPS} !=on никогда не станет истинным, тогда http:// не переключится на https://.
Затем, как написать файл конфигурации Apache, чтобы virtualhost *:443 переключился http:// на https://?

1 Ответ

0 голосов
/ 30 октября 2018

Название вашего вопроса - оксюморон - хотите ли вы такое же поведение на порте 80, как 443? Хотите отправить весь трафик с порта 80 на порт 443? Поскольку в комментарии в вашем коде упоминается HSTS, я предполагаю последнее.

Объявите хост по умолчанию для порта 80 и перенаправьте весь трафик на этом виртуальном хосте. Я настоятельно рекомендую использовать перенаправление 302, а не 301, по крайней мере до тех пор, пока ваш конфиг не будет работать так, как вы хотите.

<VirtualHost *:80>
 ServerAdmin admin@example.com
 DocumentRoot "/home/websites/example/EMPTYDIR"
 ServerName example.com

 RewriteEngine On
 RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

</VirtualHost>

(Кстати, использование по умолчанию для обработки виртуального хоста с явно заданным именем немного неопрятно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...