Zamieszanie między dwoma zasadami przepisywania adresów URL

0

Pytanie

te dwie zasady są zdezorientowani :

RewriteRule ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ search.php?city=$1&speciality=$2 [L] 
RewriteRule ^health-institute-app-([a-zA-Z\-]+)$ search.php?city=$1 [L]

kiedy chcę osiągnąć health-institute-app-mycity (2-e reguła) serwer traktuje app jako wartość i spróbować osiągnąć search.php?city=app&speciality=mycity (1-e reguła)

jak mogę powiedzieć, że to dwa różne zasady?

.htaccess apache mod-rewrite
2021-11-23 10:56:12
1

Najlepsza odpowiedź

2

Tak, bo wyrażenie regularne ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ w pierwszej regule również pasują health-institute-app-mycity.

Trzeba zmienić te dwie dyrektywy, aby najpierw było bardziej konkretną regułę.

Na przykład:

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] 

(Nie ma potrzeby użyć ukośnika-unikaj myślnika na początku lub na końcu klasy znaków.)

JEDNAK wyrażenie regularne w drugiej regule (teraz) potencjalnie niejednoznaczne, ponieważ łącznik (-) służy do rozgraniczenia dwóch wartości (city i speciality), ale kreska jest również w obu klas znaków, dlatego, prawdopodobnie, może być częścią samych wartości. Jednak i jedno i drugie city i speciality nie mogą zawierać oba łączniki, mimo, że wyrażenie regularne, najwyraźniej, pozwala na to.

Na przykład, jak należy zabiegać o health-institute-foo-bar-baz-qux być kontroluje? Tak jak квантор + jest chciwy, obecnie to doprowadzi do search.php?city=foo-bar-baz&speciality=qux. Jeśli kiedykolwiek w speciality (jak sugeruje wyrażenie regularne, to może tak być) to nigdy nie będzie mapowany.

2021-12-09 22:55:14

@narseoh W rzeczywistości, ponieważ te wartości są oddzielone myślnikiem, przez włączenie łącznika w klasy znaków (Czyli same wartości mogą zawierać myślnik) wpisujesz dwuznaczność. na przykład. Co powinno health-institute-foo-bar-baz-qux zdecydowali się na to? Czy może city zawierać myślników?
MrWhite

Tak naprawdę, w tytule niektórych miast jest łącznik, a w innych miastach istnieją dwa słowa, spacja wymieniony łącznik w adresie URL
narseoh

@narseoh DOBRZE, więc speciality nigdy nie zawiera łącznika? (W przeciwnym razie stanie się on częścią city.) W tym przypadku łącznik należy usunąć z speciality klasa znaków, aby rozwiązać tę dwuznaczność/zamieszanie, ponieważ jest to niepotrzebne.
MrWhite

dziękuję @MrWhite , w rzeczywistości nawet specjalność może mieć łącznik, który nieco utrudnia dla mnie sytuację. Pomyślałem o tym i wymieniłem (-) na ( / ), aby podzielić dane, w których stwierdzono, że u mnie były inne problemy (stworzę jeszcze jeden temat o tym).
narseoh

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................