Sì, perché la regex ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$
la prima regola corrisponde anche health-institute-app-mycity
.
È necessario invertire queste due direttive, quindi, la regola più specifica è il primo.
Per esempio:
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]
(Non c'è bisogno di protezione backslash il trattino quando all'inizio o alla fine della classe di caratteri.)
TUTTAVIA, l'espressione regolare in (ora) seconda regola è potenzialmente ambiguo il trattino (-
) è utilizzato per delimitare i due valori (city
e speciality
), ma il trattino è anche incluso in entrambe le classi di caratteri, in modo da può presumibilmente essere parte dei valori stessi. Tuttavia, entrambi city
e speciality
non è possibile contenere i trattini, nonostante l'espressione regolare, apparentemente, permettendo a questo.
Per esempio, come una richiesta di health-institute-foo-bar-baz-qux
essere risolto? Dal momento che il quantificatore +
è avido, questo risultato attualmente in search.php?city=foo-bar-baz&speciality=qux
. Se non c'è mai un segno meno in speciality
(come ha suggerito che questo potrebbe essere il caso per la regex) che non sarà mai trovata.
health-institute-foo-bar-baz-qux
risolvere? Può l'city
contengono trattini?