web-dev-qa-db-fra.com

Rediriger les non-www vers www tout en préservant le protocole

Je suis conscient du fait qu'il y a des tonnes de questions dans cette section et dans une erreur de serveur concernant les renvois d'URL non-www à www. Mais je n'ai pas pu en trouver un qui traite de ce problème tout en préservant le protocole.

Je ne suis pas un expert en réécriture de mods, et mon code est simplement copié/collé ... Voici ce que j'ai:

RewriteCond %{HTTP_Host} ^domain.tld$ [NC]
RewriteRule ^(.*)$ http://www.domain.tld$1 [R=301,L]

Alors maintenant http://domain.tld et https://domain.tld sont transférés à http://www.domain.tld. Comment faire en sorte que HTTPS reste sur HTTPS pendant que HTTP reste sur HTTP?

4
Waleed Hamra

Juste un peu d'information. Les meilleures pratiques indiquent que le trafic en provenance de HTTP doit être redirigé vers HTTPS. Si votre site est accessible sur HTTPS, vous n'avez plus besoin de HTTP.

Je pense que vous pouvez associer la redirection no-www à www avec la redirection HTTP à HTTPS.

De plus, faites attention au contenu en double si votre site est accessible avec HTTP et HTTPS.

1
Zistoloen

Vous pouvez utiliser le code que vous avez, ré-utilisez-le à nouveau avec HTTPS_Host aussi (davantage de caractères échappés avec \ bien que cela ne soit peut-être pas nécessaire sur la plupart des serveurs). Comme w3d noté dans un commentaire ci-dessus , il est conçu pour fonctionner dans un fichier htaccess en raison du / avant le $1:

RewriteCond %{HTTP_Host} ^domain\.tld$
RewriteRule ^(.*)$ "http\:\/\/www\.domain\.tld\/$1" [R=301,L]

RewriteCond %{HTTPS_Host} ^domain\.tld$
RewriteRule ^(.*)$ "https\:\/\/www\.domain\.tld\/$1" [R=301,L]

Voici celui que nous utilisons parfois pour couvrir les situations de domaines addon. Considérez que la plupart des domaines addon utilisent un sous-domaine d’utilitaire sur un domaine hôte, qui est souvent accessible. Cela transmettrait également les sous et www-sous:

RewriteCond %{HTTP_Host} ^domain\.hostdomain\.tld$ [OR]
RewriteCond %{HTTP_Host} ^www\.domain\.hostdomain\.tld$ [OR]
RewriteCond %{HTTP_Host} ^domain\.tld$
RewriteRule ^(.*)$ "http\:\/\/www\.domain\.tld\/$1" [R=301,L]

RewriteCond %{HTTPS_Host} ^domain\.hostdomain\.tld$ [OR]
RewriteCond %{HTTPS_Host} ^www\.domain\.hostdomain\.tld$ [OR]
RewriteCond %{HTTPS_Host} ^domain\.tld$
RewriteRule ^(.*)$ "https\:\/\/www\.domain\.tld\/$1" [R=301,L]

Il existe des méthodes pour les combiner en un ensemble de règles, mais il est plus agréable, IMO, de les garder séparés HTTP et HTTPS "routeurs". Vous pouvez jouer avec les cibles de chacune si vous souhaitez également appliquer le mode SSL ou SSL.

1
dhaupin