¿Es así como se usa AND, OR RewriteCond
en Apache?
rewritecond A [or]
rewritecond B
rewritecond C [or]
rewritecond D
RewriteRule ... something
se convierte if ( (A or B) and (C or D) ) rewrite_it
.
Entonces, ¿parece que "O" tiene una precedencia mayor que "Y"? ¿Hay alguna forma de saberlo fácilmente, como en la (A or B) and (C or D)
sintaxis?
mod-rewrite
apache-config
no polaridad
fuente
fuente
Respuestas:
Esta es una pregunta interesante y, dado que no se explica de manera muy explícita en la documentación, la responderé revisando el código fuente de mod_rewrite ; demostrando un gran beneficio del código abierto .
En la sección superior, verá rápidamente las definiciones utilizadas para nombrar estas banderas :
y la búsqueda de CONDFLAG_ORNEXT confirma que se utiliza en función de la existencia de la bandera [OR] :
La siguiente aparición de la bandera es la implementación real donde encontrará el bucle que pasa por todas las RewriteConditions que tiene RewriteRule, y lo que básicamente hace es (despojado, comentarios agregados para mayor claridad):
Debería poder interpretar esto; significa que OR tiene una precedencia más alta, y su ejemplo de hecho conduce a
if ( (A OR B) AND (C OR D) )
. Si, por ejemplo, tuviera estas Condiciones:se interpretaría como
if ( (A OR B OR C) and D )
.fuente
Después de muchas luchas y para lograr una solución general, flexible y más legible, en mi caso terminé guardando los resultados de OR en variables ENV y haciendo los AND de esas variables.
Requisitos :
fuente