Oui, parce que la regex ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$
dans la première règle correspond également à health-institute-app-mycity
.
Vous avez besoin d'inverser ces deux directives, de sorte que la règle plus spécifique est le premier.
Par exemple:
RewriteRule ^health-institute-app-([a-zA-Z-]+)$ search.php?city=$1 [L]
RewriteRule ^health-institute-([a-zA-Z-]+)-([a-zA-Z-]+)$ search.php?city=$1&speciality=$2 [L]
(Pas besoin de barre oblique inversée échapper le trait d'union lorsque, au début ou à la fin de la classe de caractères.)
TOUTEFOIS, l'expression régulière dans le (maintenant) la deuxième règle est potentiellement ambiguë, car le trait d'union (-
) est utilisé pour délimiter les deux valeurs (city
et speciality
), mais le trait d'union est également inclus à la fois dans les classes de caractères, de sorte qu'il peut sans doute faire partie des valeurs elles-mêmes. Toutefois, les deux city
et speciality
ne peut à la fois contenir des traits d'union, en dépit de la regex apparemment autoriser cela.
Par exemple, comment faut-il une demande pour health-institute-foo-bar-baz-qux
- il être résolu? Depuis le quantificateur +
est gourmand, ce sera actuellement résultat dans search.php?city=foo-bar-baz&speciality=qux
. Si il y a toujours un trait d'union dans le speciality
(comme l'a suggéré cela pourrait être le cas par la regex) il ne sera jamais égalé.
health-institute-foo-bar-baz-qux
résoudre? Peut lecity
contiennent des traits d'union?