Da, pentru că regex ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$
în prima regula, de asemenea, meciuri health-institute-app-mycity
.
Ai nevoie pentru a inversa aceste două directive cu atât mai mult specifice regulă este primul.
De exemplu:
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]
(Nu este nevoie să backslash-escape cratimă atunci când, la începutul sau la sfârșitul clasa de caracter.)
Cu toate ACESTEA, regex (acum) de-a doua regulă este potențial ambiguu, deoarece cratima (-
) este folosit pentru a delimita cele două valori (city
și speciality
), dar cratima este, de asemenea, incluse în ambele clase de caractere, astfel încât acesta poate fi probabil o parte din valorile ei înșiși. Cu toate acestea, ambele city
și speciality
nu poate ambele conțin cratime, în ciuda regex aparent permite acest lucru.
De exemplu, cum ar trebui să o solicitare pentru health-institute-foo-bar-baz-qux
fi rezolvate? Deoarece cuantificator +
este lacom, în prezent acest lucru va duce la search.php?city=foo-bar-baz&speciality=qux
. Dacă există vreodată o cratimă în speciality
(cum a sugerat acest lucru ar putea fi cazul de regex) nu va fi niciodată egalată.
health-institute-foo-bar-baz-qux
hotărârea de a? Poatecity
conține cratime?