Forcer SSL et www dans .htaccess

12

Je cherche un moyen de forcer SSL et www.

J'ai pu forcer les deux séparément mais ensemble, je continue à rencontrer des problèmes de redirection. Le code suivant fonctionne lors de la gestion d'une URL dans ce format: http://example.comet redirige correctement vers, https://www.example.commais lorsque l'URL entrante https://example.comne sera pas transférée vers https://www.example.com- Des suggestions?

EDIT: il doit également 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]
Stephen
la source

Réponses:

7

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

Si l'hôte est example.comou n'est pas demandé via HTTPS, il sera réécrit https://example.com/. -À- dire, il réécrit http://example.com, http://www.example.comet https://example.comà https://www.example.comen 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 comme forum.example.com, la première règle doit être telle quelle. Sinon, vous pouvez également faire un match négatif www.example.com.

Lekensteyn
la source
0

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

RewriteCond %{HTTP_HOST} ^example\.com$
Piers Karsenbarg
la source
0

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]
Arvin
la source
0

Vous pouvez également utiliser les lignes suivantes que j'utilise et fonctionne 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]
itteam
la source
0

Je viens de l'implémenter pour mon site. Fonctionne comme un charme! Ajouté en haut de mon fichier .htaccess. Redirige toutes les instances 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
user67283
la source
0

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

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

Certains des codes fournis par d'autres utilisateurs ont fonctionné pour prendre l'URL non sécurisée et / ou non www vers https://www.example1.com/, cependant, aucun d'entre eux n'était couvert https://example1.compour être également converti en "www".

J'ai mon site Web hébergé avec GoDaddy, au cas où cela ferait une différence.

Voici 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 également être:

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

Mais j'ai utilisé le code "301" pour envoyer le message " déplacé en permanence " dans l'espoir que Google et peut-être d'autres moteurs de recherche mettent à jour les anciens liens.

onpre
la source