Zmätok medzi dvoma prepisovanie adries url, pravidlá

0

Otázka

tieto dve pravidlá sú zmätení :

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]

keď chcem dosiahnuť health-institute-app-mycity (2. pravidlo) server zvážiť app ako hodnotu, a pokúsiť sa dosiahnuť search.php?city=app&speciality=mycity (1. pravidlo)

ako môžem povedať, že sú to dve samostatné pravidlá?

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

Najlepšiu odpoveď

2

Áno, pretože regulárny výraz ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ v prvom pravidle aj zápasy health-institute-app-mycity.

Potrebujete na zvrátenie týchto dvoch smerníc, takže viac osobitné pravidlo je prvý.

Naprí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] 

(Nie je potrebné lomítko-escape spojovník, keď na začiatku alebo na konci znak triedy.)

AVŠAK, regulárny výraz v (teraz) druhým pravidlom je potenciálne nejednoznačné, pretože spojovník (-) sa používa na oddelenie dvoch hodnôt (city a speciality), ale spojovník je tiež zahrnuté v oboch tried postáv, tak to môže pravdepodobne bude časť hodnoty sami. Avšak, obe city a speciality nemôže oboch obsahovať pomlčky, napriek regulárny výraz zdanlivo umožňuje to.

Napríklad, ako by žiadosť o health-institute-foo-bar-baz-qux byť vyriešený? Od quantifier + je chamtivý, bude to v súčasnosti, v dôsledku search.php?city=foo-bar-baz&speciality=qux. Ak nie je niekedy spojovník v speciality (ako navrhol toto by mohol byť prípad podľa regulárny výraz) to bude nikdy byť uzavreté.

2021-12-09 22:55:14

@narseoh Vlastne, pretože tieto hodnoty sú oddeľujú pomlčkou, vrátane spojovník v znaku triedy (tj. hodnoty sa môžu obsahovať spojovník) ste zavedenia nejasnosti. napr. Čo by health-institute-foo-bar-baz-qux vyriešiť? Môže city obsahovať pomlčky?
MrWhite

Áno, skutočne, niektoré mestá majú spojovník v meste meno a iných mestách majú dve slová, priestor je nahradiť pomlčkou v adrese url
narseoh

@narseoh OK, tak speciality nikdy obsahuje spojovník? (Inak, to sa stane súčasťou city.) V takom prípade spojovníka by mali byť odstránené z speciality charakter triedy, ak chcete odstrániť túto nejednoznačnosť/zmätok, pretože to je zbytočné.
MrWhite

vďaka @MrWhite , vlastne aj špecialita by mohli mať spojovník, ktorý robí veci trochu zložitejšie pre mňa. Som o tom premýšľal a vymeniť (-) s (/) na osobitné údaje, ktoré povedal som mal ďalšie otázky (ja si vytvoriť ďalšie vlákno o to)
narseoh

V iných jazykoch

Táto stránka je v iných jazykoch

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