É assim que usar AND, OR RewriteCond
no Apache?
rewritecond A [or]
rewritecond B
rewritecond C [or]
rewritecond D
RewriteRule ... something
torna-se if ( (A or B) and (C or D) ) rewrite_it
.
Então, parece que "OR" tem precedência mais alta do que "AND"? Existe uma maneira de saber facilmente, como na (A or B) and (C or D)
sintaxe?
mod-rewrite
apache-config
não polaridade
fonte
fonte
Respostas:
Essa é uma pergunta interessante e, como não é explicada de forma muito explícita na documentação, responderei examinando o código - fonte do mod_rewrite ; demonstrando um grande benefício do código aberto .
Na seção superior, você encontrará rapidamente as definições usadas para nomear essas sinalizações :
e pesquisar CONDFLAG_ORNEXT confirma que ele é usado com base na existência do sinalizador [OR] :
A próxima ocorrência do sinalizador é a implementação real, onde você encontrará o loop que passa por todas as RewriteConditions que um RewriteRule tem, e o que ele basicamente faz é (removido, comentários adicionados para maior clareza):
Você deve ser capaz de interpretar isso; significa que OR tem uma precedência mais alta, e seu exemplo realmente leva a
if ( (A OR B) AND (C OR D) )
. Se você tivesse, por exemplo, estas Condições:seria interpretado como
if ( (A OR B OR C) and D )
.fonte
Depois de muitas lutas e de chegar a uma solução geral, flexível e mais legível, no meu caso acabei salvando os resultados dos ORs em variáveis ENV e fazendo os ANDs dessas variáveis.
Requisitos :
fonte