2010-03-10 6 views
4

Je suis actuellement en train de réécrire une URL, mais mon expression RegEx est en train d'intercepter un répertoire que je veux ignorer.RegEx URL ReWrite correspond à toutes les expressions sauf si le terme existe

La règle de réécriture est

^people/([A-Za-z0-9\-\_]+)/?$ 

... Ce qui attrape tout ce qui correspond. Cependant, je voudrais exclure un répertoire, People_Search, donc par exemple ...

/people/John_Smith 

... transmettra, mais

/people/People_Search 

... ne devrait pas supposer être.

C'est le seul terme que je veux rechercher, donc s'il existe n'importe où dans la chaîne, je veux l'ignorer.

Des idées?

+0

qui correspond à l'expression régulière. Donc, c'est plutôt un conflit avec une autre règle ou autre chose. Comment ressemble votre fichier .htaccess? – Gumbo

Répondre

7

Regex a ce qu'on appelle une "assertion d'anticipation négative non capturante" qui dit essentiellement "ne correspond pas à ce qui suit". Il ressemble à ceci:

Que vous pouvez utiliser cela dépend du moteur de réécriture que vous utilisez, et le niveau de soutien regex qui est inclus dans ce. Je m'attendrais à ce que les réécrivains les plus communs supportent ceci.

FYI: Il existe également des assertions lookbehind négatives (? <!), Ainsi que des versions positives des assertions lookahead (? =) Et lookbehind (? < =).

Tutoriel: http://www.regular-expressions.info/lookaround.html

1
^people/(?!People_Search)([A-Za-z0-9\-\_]+)/?$ 

Un test avant négatif pour éviter correspondant People_Search après people/

Questions connexes