2016-03-29 6 views
0

Я знаю, что этот вопрос задан и ответил много раз. Однако я не могу заставить его работать для моего сценария.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, пожалуйста.

ответ

2

Вы уже позаботились о конкретном перенаправлении с "/" на "/login/mylogin.jsp", поэтому он должен работать. Для перенаправления всего HTTP-трафика на HTTPS вы можете использовать RedirectMatch.

<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 

    RedirectMatch permanent ^/(.*)$ https://sub-domain.mydomain.com/$1 

</VirtualHost> 
+0

привет спасибо за ответ. Могу ли я также использовать RedirectMatch с переменной '% {HTTP_HOST}? –

+0

Я попробовал ваше предложение с переменной '% {HTTP_HOST} и получил ответ« ERR_CONNECTION_REFUSED ». Также не то, что я не добавлял постоянное условие, поскольку я хочу проверить его до того, как я установил перенаправление навсегда. –

+0

Что касается ERR_CONNECTION_REFUSED, apache в настоящее время не может обрабатывать HTTPS-запросы на вашем сервере. Вы включили mod ssl? – nidhi

 Смежные вопросы

  • Нет связанных вопросов^_^