Est-ce comment utiliser AND, OR RewriteCond
sur Apache?
rewritecond A [or]
rewritecond B
rewritecond C [or]
rewritecond D
RewriteRule ... something
devient if ( (A or B) and (C or D) ) rewrite_it
.
Il semble donc que "OU" soit une priorité plus élevée que "ET"? Existe-t-il un moyen de le dire facilement, comme dans la (A or B) and (C or D)
syntaxe?
mod-rewrite
apache-config
nonopolarité
la source
la source
Réponses:
C'est une question intéressante et comme elle n'est pas expliquée très explicitement dans la documentation, je vais y répondre en passant par le code source de mod_rewrite ; démontrant un grand avantage de l' open-source .
Dans la section supérieure, vous repérerez rapidement les définitions utilisées pour nommer ces indicateurs :
et la recherche de CONDFLAG_ORNEXT confirme qu'il est utilisé sur la base de l'existence de l'indicateur [OR] :
La prochaine occurrence de l'indicateur est l' implémentation réelle où vous trouverez la boucle qui traverse toutes les RewriteConditions d'une RewriteRule, et ce qu'elle fait essentiellement est (supprimée, commentaires ajoutés pour plus de clarté):
Vous devriez être capable d'interpréter cela; cela signifie que OR a une priorité plus élevée, et votre exemple mène effectivement à
if ( (A OR B) AND (C OR D) )
. Si vous souhaitez, par exemple, avoir ces conditions:il serait interprété comme
if ( (A OR B OR C) and D )
.la source
Après de nombreuses difficultés et pour parvenir à une solution générale, flexible et plus lisible, dans mon cas, j'ai fini par enregistrer les résultats des OR dans des variables ENV et faire les ET de ces variables.
Exigences :
la source