Confusão entre dois reescrever urls regras

0

Pergunta

estas duas regras são confusas :

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]

quando eu quero chegar health-institute-app-mycity (2ª regra) o servidor considerar app como um valor e tente chegar search.php?city=app&speciality=mycity (1ª regra)

como posso dizer que essas são duas regras separadas?

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

Melhor resposta

2

Sim, porque o regex ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ na primeira regra também coincide com health-institute-app-mycity.

Você precisa reverter estas duas directivas para a regra mais específica é o primeiro.

Por exemplo:

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] 

(Não precisa de barra invertida escapar o hífen, quando no início ou no final do caráter de classe.)

No ENTANTO, a regex no (agora) a segunda regra é potencialmente ambíguo desde o hífen (-) é usado para delimitar os dois valores (city e speciality), mas o hífen também está incluída em ambas as classes de personagem, então ele pode, presumivelmente, ser parte dos próprios valores. No entanto, ambos city e speciality não contêm hifens, apesar de o regex, aparentemente, permitindo que este.

Por exemplo, como deve um pedido de health-institute-foo-bar-baz-qux ser resolvido? Desde o quantificador + é ganancioso, isso irá resultar em search.php?city=foo-bar-baz&speciality=qux. Se há sempre um hífen no speciality (como sugerido este poderia ser o caso de o regex) que nunca será correspondido.

2021-12-09 22:55:14

@narseoh, na Verdade, uma vez que estes valores são delimitados por um hífen, incluindo-se o hífen nas classes de personagens (ie. os próprios valores podem conter um hífen) você está introduzindo uma ambiguidade. por exemplo. O que deve health-institute-foo-bar-baz-qux resolver? Pode o city contêm hifens?
MrWhite

Sim, de fato, algumas cidades têm um hífen no nome da cidade e de outras cidades têm duas palavras, o espaço é substituído por um hífen no url
narseoh

@narseoh OK, então a speciality nunca contém um hífen? (Caso contrário, ele vai se tornar parte da city.) No caso, o hífen deve ser removido do speciality classe de personagem, para remover essa ambigüidade/confusão, uma vez que é supérfluo.
MrWhite

obrigado @MrWhite , que, na verdade, especialidade poderia ter um hífen, o que torna as coisas um pouco mais complicado para mim. Eu pensei sobre isso e substituído (-) com (/) para separar os dados, que disse que eu tinha outros problemas (eu vou criar outro thread sobre isso)
narseoh

Em outros idiomas

Esta página está em outros idiomas

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