Я знаю, что этот вопрос задан и ответил много раз. Однако я не могу заставить его работать для моего сценария.Apache virtual host redirect http to https
Я хочу перенаправить все http-трафик на https и перенаправить https-root на страницу входа. Вот мои виртуальные хосты в файле vhost.conf.
<VirtualHost *:80>
DocumentRoot /var/www
ServerName sub-domain.mydomain.com
ServerAdmin [email protected]
CustomLog /var/log/httpd/http_access.log common
LOGFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
ErrorLog /var/log/httpd/http_error.log
TransferLog /var/log/httpd/http_transfer.log
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1
#Redirect permanent/https://%{HTTP_HOST}%/login/mylogin.jsp (Not used as I need to use a rewrite rule rather than redirect only the root)
</VirtualHost>
<VirtualHost *:443>
DocumentRoot /var/www
ServerName sub-domain.mydomain.com
ServerAdmin [email protected]
CustomLog /var/log/httpd/https_access.log common
LOGFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
ErrorLog /var/log/httpd/https_error.log
TransferLog /var/log/httpd/https_transfer.log
SSLEngine on
SSLOptions +StrictRequire
SSLCertificateFile /etc/httpd/conf/mydomain.crt
SSLCertificateKeyFile /etc/httpd/conf/mydomain.key
SSLCertificateChainFile /etc/httpd/conf/intermediate.crt
# HSTS (mod_headers is required) (15768000 seconds = 6 months)- ref https://mozilla.github.io/server-side-tls/ssl-config-generator/
Header always set Strict-Transport-Security "max-age=15768000"
JkMount .....
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
SSLRequireSSL
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
AddDefaultCharset utf-8
AddType image/svg+xml svg svgz
AddEncoding gzip svgz
RewriteEngine on
RewriteRule ^/$ /login/mylogin.jsp [R=permanent,L]
</VirtualHost>
Корень https для переадресации имен работает отлично. Однако я не могу заставить http работать с https перенаправлением. Я пробовал различные рекомендации:
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1
RewriteRule ^/?(.*) https://%{SERVER_NAME}/%$1
как различные сообщения здесь. Но некоторые из них не работают, и по некоторым рекомендациям были высказаны замечания о том, что строки запроса не работают с переменной %{REQUEST_URI}
.
Мне нужно хорошее решение, которое перенаправляет весь трафик http на https, сохраняя остальную часть URL-адреса запроса. Например, .
http://sub-domain.mydomain.com в https://sub-domain.mydomain.com
http://sub-domain.mydomain.com/somepage.html в https://sub-domain.mydomain.com/somepage.html
http://sub-domain.mydomain.com/thepage.html?day=tuesday&month=marchhttps://sub-domain.mydomain.com/thepage.html?day=tuesday&month=march в
Я сделаю редирект постоянный раз я испытал и я доволен редирект работает, как ожидалось.
Я не хочу использовать htaccess, пожалуйста.
привет спасибо за ответ. Могу ли я также использовать RedirectMatch с переменной '% {HTTP_HOST}? –
Я попробовал ваше предложение с переменной '% {HTTP_HOST} и получил ответ« ERR_CONNECTION_REFUSED ». Также не то, что я не добавлял постоянное условие, поскольку я хочу проверить его до того, как я установил перенаправление навсегда. –
Что касается ERR_CONNECTION_REFUSED, apache в настоящее время не может обрабатывать HTTPS-запросы на вашем сервере. Вы включили mod ssl? – nidhi