Como verificar a existência de diretiva no Apache 2.2

3

Estou tentando editar um arquivo de configuração para que ele funcione simultaneamente no Apache 2.2 e no Apache 2.4.

O arquivo foi originalmente escrito para o Apache 2.2 e inclui a seguinte configuração:

RewriteLogLevel 3
RewriteLog /var/log/httpd/apache_rewrite_log

No entanto, RewriteLogLevel não é mais suportado no Apache 2.4. Em vez disso, nessa situação, preciso usar:

LogLevel alert rewrite:trace6

Essencialmente, o que eu gostaria de fazer é:

<IfDirective LogLevel>
  LogLevel alert rewrite:trace6
</IfDirective>
<IfDirective RewriteLog>
  RewriteLogLevel 3
  RewriteLog /var/log/httpd/apache_rewrite_log
</IfDirective>

No entanto, IfDirective não parece ser uma coisa no Apache.

    
por Jackson 22.07.2017 / 02:01

1 resposta

3

Não estou ciente de um método para verificar a existência de uma diretiva específica. (Você pode verificar a presença de módulos inteiros usando <IfModule> , mas RewriteLog / RewriteLogLevel faz parte do mod_rewrite no Apache 2.2 e LogLevel faz parte do core no Apache 2.4, então isso não nos ajuda infelizmente.)

No entanto, podemos verificar a versão do Apache usando <IfVersion> e processar diretivas de acordo.

Por exemplo, LogLevel está disponível na versão 2.3.6 e posterior :

<IfVersion >= 2.3.6>
  LogLevel alert rewrite:trace6
</IfVersion>
<IfVersion !>= 2.3.6>
  RewriteLogLevel 3
  RewriteLog /var/log/httpd/apache_rewrite_log
</IfVersion>

O prefixo ! na segunda diretiva simplesmente inverte o significado. Isso poderia ser escrito como <IfVersion < 2.3.6> .

    
por 22.07.2017 / 11:33