web-dev-qa-db-fra.com

La règle de réécriture HTTP vers HTTPS ne fonctionne pas

ubuntu 14.04

Apache/2.4.7

Je poste ici le fichier de conf pour mon hôte virtuel et mon hôte ssl par défaut. pas capable de comprendre ce que je fais mal.

http://<website_url> affiche l'index du dossier. Je veux rediriger ceci vers https.

https://<website_url> s'ouvre correctement.

IMPORTANT: je n'ai pas activé le site SSL par défaut.

 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>

Et voici le fichier de configuration de 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>
3
rajeev

Si vous voulez que http://www.mywebsite.com/ soit toujours envoyé sur httpsname__, vous devez utiliser redirectcar utiliser mod_rewrite n'est pas le comportement recommandé.

Selon Requête de redirection vers SSL Page wiki Apache:

Lorsque vous utilisez SSL, vous aurez souvent au moins deux hôtes virtuels: un sur le port 80 pour traiter les demandes ordinaires et un sur le port 443 pour desservir SSL. Si vous souhaitez rediriger des utilisateurs du site non sécurisé vers le site SSL, vous pouvez utiliser une directive de redirection ordinaire à l'intérieur du VirtualHost non sécurisé.

Donc, essayez d’ajouter cette directive dans votre VirtualHost non sécurisé:

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

Si vous souhaitez malgré tout utiliser la règle rewritename__, vous devez ajouter ces lignes dans VirtualHostnon sécurisé:

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}/$1 [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/

comme décrit dans HTTP à HTTPS Apache wiki page.


Votre configuration ne fonctionne pas, car il n’est pas défini un VirtualHost non sécurisé (généralement sur le port 80) qui gère les requêtes http et les redirige pour sécuriser VirtualHost.

Essayez d'ajouter ces lignes:

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

Dans ce cas, vous n'avez pas besoin d'un DocumentRootcar ce VirtualHostredirige tout.

La règle Rewriteindiquée dans votre fichier de configuration empêche l'accès sécurisé à VirtualHostvia le protocole httpname__; par exemple, http://www.mywebsite.com:443/ sera https://www.mywebsite.com:443/

Vous devez également vérifier que votre site est lié à la bonne page (https) depuis vos pages HTML.

8
Lety

Ceci est un ancien post, mais dans Ubuntu 14.04, la réécriture originale fonctionne, il vous suffit de la changer en:

<Directory /var/www/>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI}
</Directory>
0
Paul Bauer