2010-11-10 5 views
0

je la question suivante:Apache URL canonique redirection 301 et amical problème réécriture url

Je veux rediriger une URL non canonique à celui canonique, mais maintaning la ré-écriture d'URL conviviale.

Dans mon .htaccess j'ai les suivantes:


RewriteEngine On 

#Protect some directories 
RewriteRule ^(system|modules|application) - [F,L] 

#Force Using Canonical Name 
RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC] 
RewriteRule .* http://www.example.com/$0 [R=301] 

#Friendly url rewriting 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php?route=$0 [QSA,L] 

Je n'ai aucun problème avec cette adresse:

http://www.example.com/articles/10/this-is-a-sample-post.html

Mais lorsque je tente d'accéder à la même URL sans le « www " partie, il est redirigé vers:

http://www.example.com/index.php?route=articles/10/this-is-a-sample-post.html

En d'autres termes,

http://example.com/articles/10/this-is-a-sample-post.html

doivent être redirigés vers

http://www.example.com/articles/10/this-is-a-sample-post.html

Quelqu'un sait où est le problème? Merci

Répondre

0

Le problème réside dans le fait que votre redirection externe doit être effectuée en premier, mais actuellement il prend effectivement place après votre dernier bloc de règles. Ajout du L flag pour forcer une redirection immédiate résoudra votre problème:

RewriteRule .* http://www.example.com/$0 [R=301,L] 

Sans le drapeau, l'URL sera transformé à nouveau par le second bloc de règles avant que la redirection se produit, ce qui est la raison pour laquelle vous obtenez le comportement inattendu.