Это как использовать И, ИЛИ для RewriteCond
Apache?
rewritecond A [or]
rewritecond B
rewritecond C [or]
rewritecond D
RewriteRule ... something
становится if ( (A or B) and (C or D) ) rewrite_it
.
Итак, похоже, что «ИЛИ» имеет более высокий приоритет, чем «И»? Есть ли способ легко сказать, как в (A or B) and (C or D)
синтаксисе?
mod-rewrite
apache-config
nonopolarity
источник
источник
Ответы:
Это интересный вопрос, и, поскольку он не объясняется очень подробно в документации, я отвечу на него, просмотрев исходный код mod_rewrite ; демонстрируя большое преимущество открытого исходного кода .
В верхнем разделе вы быстро найдете определения, используемые для именования этих флагов :
и поиск CONDFLAG_ORNEXT подтверждает, что он используется на основании наличия флага [OR] :
Следующее появление флага - это фактическая реализация, в которой вы найдете цикл, который проходит через все условия RewriteConditions, которые есть в RewriteRule, и что он в основном делает (вырезано, комментарии добавлены для ясности):
Вы должны уметь это интерпретировать; это означает, что OR имеет более высокий приоритет, и ваш пример действительно приводит к
if ( (A OR B) AND (C OR D) )
. Если у вас, например, есть следующие Условия:это будет интерпретироваться как
if ( (A OR B OR C) and D )
.источник
После многих усилий и для достижения общего, гибкого и более читаемого решения в моем случае я закончил тем, что сохранил результаты OR в переменных ENV и выполнил AND этих переменных.
Требования :
источник