2010-11-21 4 views
1

Je veux rediriger un utilisateur qui reçoit deétat chaîne de requête dans regex

page.php?letter=A&num=2 

à l'adresse suivante:

/static/A/2 

J'ai essayé d'utiliser l'expression rationnelle suivante:

Options +FollowSymlinks 
RewriteEngine On 

RewriteCond %{QUERY_STRING} ^letter=([a-zA-Z]+$)&num=([0-9]+$) [NC] 
RewriteRule ^page.php static/%1/%2? [NC,R=301,L] 

Mais ça ne marche pas ... Il me semble que la première expression ([a-zA-Z]+$) "attrape" le & num = ... aussi bien dans l'URL et c'est pourquoi cela gâche la condition:/

Des idées pour corriger cette condition?

Merci!

Joel

+1

Est-ce que '^ lettre = ([a-zA-Z] +) & num = ([0-9] +) $' travail? – thejh

Répondre

2

Vous devez supprimer probablement le $ à la fin des parenthèses, comme cela signifie généralement « correspond à la fin de la ligne » dans les expressions régulières.

Ainsi, votre RewriteCond serait:

RewriteCond %{QUERY_STRING} ^letter=([a-zA-Z]+)&num=([0-9]+) [NC] 
+0

Peut-être avec un caractère de dollar à la fin? – thejh

+0

Je vais ajouter le dollar à la fin. Un dernier problème, il ne réécrit que lorsque j'utilise un nombre à un chiffre (de 0 à 9). Comment puis-je accepter tous les numéros? – Joel

+0

@thejh, il devrait fonctionner de toute façon, mais le dollar peut être ajouté. @Joel, il devrait accepter toutes les chaînes contenant seulement des chiffres, y compris 12, 123, 1234, 99999, etc. Le '+' après '[0-9]' signifie "un ou plusieurs", donc il devrait correspondre à tous les nombres. – Mewp