web-dev-qa-db-fra.com

Forcer SSL et www dans .htaccess

Je cherche un moyen de forcer SSL et www.

J'ai été en mesure de forcer les deux séparément mais ensemble, je continue à me heurter à des problèmes de redirection. Le code suivant fonctionne lorsque vous manipulez une URL dans ce format: http://example.com et qu'il redirige correctement vers https://www.example.com, mais lorsque l'URL entrante est https://example.com, il ne sera pas transmis à https://www.example.com - Aucune suggestion. ?

EDIT: il faut aussi envoyer http://www.example.com à https://www.example.com.

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80
RewriteCond %{HTTP_Host} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
11
Stephen

La première ligne est utilisée pour empêcher la réécriture des URL internes. Cela pourrait entraîner l'affichage de pages différentes, je l'ai donc supprimée.

Si l'hôte est example.com ou n'est pas demandé via HTTPS, il sera réécrit en https://example.com/. C'est-à-dire qu'il réécrit http://example.com, http://www.example.com et https://example.com en https://www.example.com en une seule action.

RewriteCond %{HTTP_Host} ^example\.com$ [OR]
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

Documentation sur mod_rewrite pour Apache 2.2 .

Si vous avez des sous-domaines tels que forum.example.com, la première règle doit être telle quelle. Sinon, vous pouvez également faire une correspondance négative avec www.example.com.

7
Lekensteyn

La troisième ligne ne doit-elle pas être:

RewriteCond %{HTTP_Host} ^example\.com$
0
Piers Karsenbarg

Essaye ça:

RewriteCond %{REMOTE_ADDR} !127\.0\.0\.0
RewriteCond %{SERVER_PORT} 80 [OR]
RewriteCond %{HTTP_Host} !^www.example\.com$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
0
Arvin

Je viens de mettre cela en œuvre pour mon site. Fonctionne comme un charme! Ajouté en haut de mon fichier .htaccess. Redirige toutes les occurrences de personnes tapant www ou non www, http ou https.

# BEGIN HTTPS Redirect
RewriteEngine On 
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
# END HTTPS Redirect
0
user67283

J'ai testé toutes les suggestions données ci-dessus, mais aucune ne couvrait tout le scénario.

Je voulais que tous les visiteurs aillent à https://www.example1.com/

Certains des codes fournis par d'autres utilisateurs ont tenté de créer des URL non sécurisées et/ou non www vers https://www.example1.com/, mais aucun d'entre eux ne couvrait https://example1.com d'être également converti en "www".

Mon site Web est hébergé chez GoDaddy, au cas où cela ferait une différence.

C'est le code qui a fonctionné pour moi:

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

La dernière ligne pourrait aussi être:

RewriteRule ^(.*)$ https://www.example1.com/$1 [R,L]

Mais j'ai utilisé le code "301" pour envoyer le message " déplacé de façon permanente " dans l'espoir que Google et peut-être d'autres moteurs de recherche mettront à jour d'anciens liens.

0
onpre

Vous pouvez également utiliser les lignes suivantes que j’utilise et travailler parfaitement.

(Supprimez le haut RewriteCond si vous n'utilisez pas CloudFlare)

RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' [OR]
RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_Host}%{REQUEST_URI} [L,R=302]
RewriteCond %{HTTP_Host} !^www\.
RewriteRule .* https://www.%{HTTP_Host}%{REQUEST_URI} [L,R=302]
0
itteam