redirection htaccess non www vers www avec SSL / HTTPS


10

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

Par exemple, http://example.comdevrait allerhttps://www.example.com

Voici 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]

Réponses:


11

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]

1
Notez que cela entraînera une double redirection lors de la demande http://example.com(c'est-à-dire HTTP et non www), car il redirigera d'abord vers HTTPS sur le même hôte (c'est-à-dire sans www), puis redirigera vers en wwwtant que deuxième redirection. Vous pouvez corriger cela en inversant simplement ces deux règles.
MrWhite

@MrWhite @souhaitez-vous réellement une double redirection sur une https://redirection correcte , surtout si vous utilisez HSTS. De cette façon, votre préférence HSTS peut être stockée par le navigateur pour vos domaines et les demandes suivantes seront toujours par défauthttps://
xsrf

@xsrf Il est toujours "correct" (et plus efficace) d'avoir une seule redirection www et HTTPS. Il ne doit être séparé que lorsque vous implémentez HSTS.
MrWhite

Les deux bons points de xsrf et MrWhite. J'ai mis à jour la réponse.
Will

@xsrf J'ai vérifié la double redirection avec htaccess.madewithlove.be et il semble qu'il ne redirige que http: //> https: // pas www .
Will

6

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

Vous devez ORrespecter 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_PORTn'est pas 443 (c.-à-d. N'est pas HTTPS) ou que l'hôte ne commence pas par www.(c.-à-d. Que vous accédez au domaine nu), redirigez vers l'URL canonique.

Cependant, le fait que cela soit redirigé https://example.comvers https://www.example.comdépendra de votre certificat de sécurité. (Votre site doit être accessible par www et non-www via SSL pour que la redirection .htaccess se déclenche.)


1

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

Exemple: http://domain.comrediriger vershttps://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.comrediriger vershttps://www.domain.com

RewriteEngine on

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

Cela ne gère pas la redirection non www vers www comme indiqué dans la question.
MrWhite

Vous pouvez ajouter cette ligne dans htaccess RewriteCond% {HTTP_HOST}! ^ Www \. RewriteRule ^ (. *) $ % {HTTP_HOST} / $ 1 [R = 301, L]
Ajay Patidar

Remplacer RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] parRewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [R=301,L]
Ajay Patidar

Vous pouvez modifier votre réponse.
MrWhite
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.