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 ?

1voto

ePi272314 Points 4098

Deux avertissements

Évitez les codes d'état de réponse 301 et préférez les codes modernes 303 ou 307.

Évitez les 301

Réfléchissez bien si vous avez vraiment besoin de la redirection permanente indiquée comme [R=301] car si vous décidez de la modifier ultérieurement, les visiteurs précédents de la page continueront à voir la page de la redirection initiale.

Les informations de redirection permanente sont souvent stockées dans le cache du navigateur et, en général, il est difficile de les éliminer (recharger la page ne résout pas le problème). Les visiteurs de votre site Web seront bloqués dans la redirection précédente "pour toujours".

Évitez aussi le 302

La nouvelle version du protocole HTTP (v1.1) a ajouté deux nouveaux codes de statut de réponse qui peuvent être utilisés à la place du code 302.

  • 303 Redirection d'URL mais demandant de changer le type de requête en GET.
  • 307 Redirection d'URL mais exigeant de conserver le type de requête tel qu'il a été envoyé initialement.

Vous pouvez toujours utiliser le code 302 (redirection non permanente) bien qu'elle soit considérée comme ambiguë. Dans tous les cas, la plupart des navigateurs implémentent 302 de la même manière que la nouvelle 303 Le code l'exige.

0voto

Buttle Butkus Points 1717

Si possible, ajoutez ceci au fichier de configuration principal d'Apache. Il s'agit d'une solution plus légère, nécessitant moins de traitement.

<VirtualHost 64.65.66.67>
        ServerName example.com
        Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost 64.65.66.67>
   ServerAdmin me@example.com
   ServerName www.example.com
   DocumentRoot /var/www/example
   .
   .
   . etc

Donc, le séparé VirtualHost pour "exemple.com" capture ces requêtes et les redirige de façon permanente vers votre site principal. VirtualHost . Ainsi, il n'y a pas d'analyse REGEX à chaque demande et les navigateurs de vos clients mettront la redirection en mémoire cache afin qu'ils ne demandent plus jamais (ou rarement) la "mauvaise" url, ce qui vous permet d'économiser la charge du serveur.

Notez que la barre oblique de fin dans Redirect permanent / http://www.example.com/ . Sans cela, une redirection de example.com/asdf serait redirigé vers http://www.example.comasdf au lieu de http://www.example.com/asdf .

-2voto

user970587 Points 290

Écrire dans .htaccess :)

## Redirect from non-www to www (remove the two lines below to enable)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

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