215 votes

Redirection de non-www vers www dans .htaccess

J'ai ceci dans mon fichier .htaccess :

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com$1 [R=301,L]

mais chaque fois que j'accède à un fichier sur ma racine comme http://example.com/robots.txt il sera redirigé vers http://www.example.comrobots.txt/ .

Comment puis-je corriger cela pour qu'il redirige correctement vers http://www.example.com/robots.txt ?

433voto

ranman Points 1674

Modifiez votre configuration comme suit (ajoutez une barre oblique) :

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

Ou la solution décrite ci-dessous (proposée par @absiddiqueLive ) fonctionnera pour n'importe quel domaine :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Si vous devez prendre en charge http et https et préserver le choix du protocole, essayez ce qui suit :

RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]

Où vous remplacez login con checkout.php ou toute autre URL sur laquelle vous devez prendre en charge HTTPS.

Je dirais que c'est une mauvaise idée. Pour le raisonnement veuillez lire cette réponse .

110voto

Alexey Kosov Points 1446

Voici la solution correcte qui supporte https et http :

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

UPD. : pour les domaines comme .co.uk , remplacer

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$

avec

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+\.[^.]+$

88voto

Broken_Mirror Points 151
RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.

RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Pour Https

RewriteCond %{HTTPS}s ^on(s)|

RewriteRule ^(.*)$ http%1://www.%{HTTP_HOST}/$1 [R=301,L]

26voto

starkeen Points 29161

L'exemple suivant fonctionne sur les deux ssl y non-ssl et est beaucoup plus rapide puisque vous n'utilisez qu'une seule règle pour gérer http et https

RewriteEngine on

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

[Testé]

Cela va rediriger

http

a

https

a

9voto

bewebdeveloper Points 144

Essayez ceci, je l'ai utilisé sur de nombreux sites web, il fonctionne parfaitement.

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/$1  [QSA,L,R=301]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X