HTTP para regra de reescrita HTTPS não funciona

3

ubuntu 14.04

Apache / 2.4.7

Estou postando aqui o arquivo conf para meu host virtual e host ssl padrão. não consigo entender o que estou fazendo de errado.

http://<website_url> mostra o índice da pasta. Quero redirecionar isso para https.

https://<website_url> abre bem.

IMPORTANTE: Eu não habilitei o site SSL padrão.

 cat default-ssl.conf|grep -v "#"

<IfModule mod_ssl.c>
      <VirtualHost _default_:443>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on
        SSLCertificateFile  /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        BrowserMatch "MSIE [2-6]" \
                nokeepalive ssl-unclean-shutdown \
                downgrade-1.0 force-response-1.0
        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    </VirtualHost>
</IfModule>

E aqui está o arquivo de configuração mywebsite:

cat www.mywebsite.com.conf|grep -v "#"

<VirtualHost *:443>
    ServerName www.mywebsite.com:443
    ServerAlias www.mywebsite.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/www.mywebsite.com/html

    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
     <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{HTTPS} off
      RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    </IfModule>

SSLEngine on   
    SSLEngine on
        SSLCertificateFile /etc/apache2/ssl/apache.crt
        SSLCertificateKeyFile /etc/apache2/ssl/apache.key

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
        SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

    ErrorLog ${APACHE_LOG_DIR}/ssl.error.log
    CustomLog ${APACHE_LOG_DIR}/ssl.access.log combined
</VirtualHost>
    
por rajeev 16.11.2014 / 07:30

2 respostas

7

Se você quiser que http://www.mywebsite.com/ seja sempre enviado acima de https , use redirect porque usar mod_rewrite não é o comportamento recomendado.

De acordo com a Página de wiki do Redirect Request to SSL do Apache:

  

Ao usar SSL, você frequentemente terá pelo menos dois hosts virtuais:   um na porta 80 para atender a solicitações comuns e um na porta 443 para   servir SSL. Se você deseja redirecionar os usuários do site não seguro para   o site SSL, você pode usar uma diretiva de Redirecionamento comum dentro do   VirtualHost não seguro

Então, tente adicionar esta diretiva no seu VirtualHost não seguro:

Redirect permanent / https://www.mywebsite.com/

Se você quiser mesmo assim, use rewrite rule, você deve adicionar essas linhas em VirtualHost não seguras:

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/ [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.mywebsite.com/foo/ to https://www.mywebsite.com/foo/

como descrito na página wiki do HTTP para HTTPS Apache.

Sua configuração não funciona, porque não está definido um VirtualHost não seguro (geralmente na porta 80) que lida com solicitações http e as redireciona para o SecureHost seguro.

Tente adicionar estas linhas:

<VirtualHost *:80>
   ServerName dev.dom1.com
   Redirect permanent / https://dev.dom1.com/
</VirtualHost>

Nesse caso, você não precisa de um DocumentRoot porque esse VirtualHost está redirecionando tudo.

A regra

Rewrite mostrada em seu arquivo de configuração protege o VirtualHost do acesso seguro pelo protocolo http , por exemplo, http://www.mywebsite.com:443/ será https://www.mywebsite.com:443/

Você também deve verificar se o site está vinculado à página correta (https) nas páginas HTML.

    
por Lety 16.11.2014 / 17:13
0

Este é um post antigo, mas no Ubuntu 14.04 a reescrita original funciona, você só precisa alterá-lo para:

<Directory /var/www/>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</Directory>
    
por Paul Bauer 25.05.2015 / 08:34