2012-07-24 11 views
1

Je veux réécrire url de article.php? Id = 123 à l'article/123Apache htaccess redirection 301

J'ai ajouté la règle suivante, il fonctionne très bien

RewriteRule ^article/(.*) /article.php?id=$1 [PT] 

Je veux aussi ajouter un 301 Règle de redirection pour laisser le moteur de recherche savoir article.php? Id = 123 devrait passer à l'article/123. J'ai ajouté la règle suivante mais ne semble pas fonctionner.

RewriteRule ^article.php?id=(.*)$ /article/$1 [R=301,L] 

Répondre

0

Vous devez faire correspondre la demande réelle et non l'URI, car l'URI est réécrite par d'autres règles:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /article\.php\?id=([^\ ]+) 
RewriteRule ^article\.php$ /article/%1? [R=301,L] 

Si vous ne correspond pas à la demande réelle, une boucle de redirection se produira:

  1. navigateur demande /article.php?id=123
  2. serveur redirige vers /article/123
  3. demande du navigateur /article/123
  4. serveur réécrit en interne pour /article.php?id=123
  5. serveur correspond à l'interne et redirige le navigateur vers /article/123
  6. demande du navigateur /article/123
  7. répétition de 4.
+0

Merci! J'ai essayé mais ne peux toujours pas voir la redirection 301 en utilisant ce 'http: // www.internetofficer.com/seo-tool/redirect-check /' –

+0

@Sophia La règle fonctionne pour moi quand je le mets dans un fichier htaccess vide dans mon document racine pour un serveur apache vanille et je demande 'http: //localhost/article.php? id = 123', je suis redirigé vers' http: // localhost/article/123' –

+0

Avez-vous 'RewriteRule^article/(. *) /article.php?id=$1 [PT] 'dans votre fichier htaccess aussi? –

0

Essayez comme ceci:

RewriteRule ^article.php?id=(.*)$ /article/$1 [L,R=301] 
+0

J'utilise ce site 'http: // www.internetofficer.com/seo-outil/redirect-check/' pour vérifier la redirection 301. Je suis passé à '[L, R = 301]'. Ne fonctionne toujours pas. –

+0

Cette règle ne fonctionnera pas car Apache pensera que 'RewriteRule' aura 4 paramètres, la correspondance, la cible, un drapeau' [L, 'et le drapeau' R = 301] ', ce qui est une syntaxe incorrecte, les drapeaux les crochets entre crochets ne peuvent pas être séparés par des espaces: '[L, R = 301]' –