Zmatek mezi dvěma přepisování adres url, pravidla

0

Otázka

tyto dvě pravidla jsou zmatený :

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]

když chci dosáhnout health-institute-app-mycity (2. pravidlo) serveru zvážit app jako hodnotu a pokusit se dosáhnout search.php?city=app&speciality=mycity (1. pravidlo)

jak mohu říci, že se jedná o dvě samostatná pravidla?

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

Nejlepší odpověď

2

Ano, protože regex ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ v první pravidlo také odpovídá health-institute-app-mycity.

Potřebujete zvrátit tyto dvě směrnice takže další zvláštní pravidlo je první.

Například:

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] 

(Není třeba zpětné lomítko-útěk spojovník, když na začátku nebo na konci znak třídy.)

NICMÉNĚ, regex v (nyní) druhé pravidlo je potenciálně nejednoznačný, protože spojovník (-) se používá k oddělení dvou hodnot (city a speciality), ale pomlčka je také zahrnuta v obou tříd postav, tak to může pravděpodobně být součástí samotné hodnoty. Nicméně, oba city a speciality nemohou obsahovat pomlčky, i přes regex zdánlivě které to umožňují.

Například, jak by měla žádost o health-institute-foo-bar-baz-qux být vyřešen? Od kvantifikátor + je chamtivý, to se v současné době v důsledku search.php?city=foo-bar-baz&speciality=qux. Pokud tam je někdy pomlčka v speciality (jak to navrhl by mohl být případ podle regex) to nebude nikdy uzavřeno.

2021-12-09 22:55:14

@narseoh ve Skutečnosti, protože tyto hodnoty jsou odděleny pomlčkou, včetně pomlčky v charakteru třídy (tj. hodnoty samy o sobě mohou obsahovat spojovník), který se zavádí nejednoznačnost. např. Co by měl health-institute-foo-bar-baz-qux odhodlání? Může city obsahují spojovníky?
MrWhite

Ano, skutečně, některá města mají pomlčku v názvu města a další města mají dvě slova, prostor je nahrazen pomlčkou v url
narseoh

@narseoh OK, takže speciality nikdy obsahuje spojovník? (Jinak to bude stát se součástí city.) V takovém případě spojovník by měly být odstraněny z speciality charakter třídy, k odstranění této nejednoznačnosti/zmatku, protože to je zbytečné.
MrWhite

díky @MrWhite , vlastně i speciality by mohly mít pomlčku, která dělá věci trochu složitější pro mě. Přemýšlel jsem o tom a nahrazeny (-) s (/) k oddělení dat, která řekl, že jsem měl jiné problémy (budu vytvářet další vlákno o)
narseoh

V jiných jazycích

Tato stránka je v jiných jazycích

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