web-dev-qa-db-fra.com

htaccess redirige les non-www vers www avec SSL / HTTPS

Je veux une règle de réécriture qui redirige tout vers https://ETwww.

Par exemple, http://example.com devrait aller à https://www.example.com

C'est ce que j'ai

RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteCond %{HTTP_Host} ^(www\.)?example\.com$ [NC]
RewriteRule ^(.*)$ "https\:\/\/www\.example\.com\/$1" [R=301,L]
8
Will

J'ai trouvé la solution.

Sans HSTS (redirection unique):

RewriteCond %{HTTP_Host} !^www\.
RewriteRule .* https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]

Avec HSTS (double redirection):

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule .* https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=301]
10
Will

Vos conditions sont implicitement AND et votre deuxième condition sera toujours vraie (sauf si vous avez d'autres domaines), de sorte que vos règles actuelles ne redirigeront que le trafic non SSL.

Vous devez OR les conditions et annuler la www (deuxième) condition:

RewriteEngine On
RewriteCond %{SERVER_PORT} !=443 [OR]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

Si le SERVER_PORT n’est pas 443 (c’est-à-dire qu’il n’est pas HTTPS) o l’hôte ne commence pas par www. (c’est-à-dire que vous accédez au domaine nu), puis redirigez-le vers le URL canonique.

Toutefois, le fait que cela redirige https://example.com vers https://www.example.com dépendra de votre certificat de sécurité. (Votre site doit être accessible à la fois sur www et sur www sur SSL pour que la redirection .htaccess se déclenche.)

5
MrWhite

Cela utilisera à la fois www ou non www. Si vous essayez d'ouvrir un lien avec www, puis redirigez l'URL vers https avec www.

Exemple: http://domain.com redirection vers https://domain.com

ou Si vous essayez d'ouvrir un lien avec non-www, redirigez l'URL vers https avec non-www

Exemple: http://www.domain.com redirection vers https://www.domain.com

RewriteEngine on

RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://%{HTTP_Host}%{REQUEST_URI} [R=301,L]
1
Ajay Patidar