Назад | Перейти на главную страницу

Как проверить наличие директивы в Apache 2.2

Я пытаюсь отредактировать файл конфигурации, чтобы он работал одновременно на Apache 2.2 и Apache 2.4.

Файл изначально был написан для Apache 2.2 и включает следующую конфигурацию:

RewriteLogLevel 3
RewriteLog /var/log/httpd/apache_rewrite_log

Тем не мение, RewriteLogLevel больше не поддерживается в Apache 2.4. Вместо этого в этой ситуации мне нужно использовать:

LogLevel alert rewrite:trace6

По сути, я бы хотел:

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

Тем не мение, IfDirective похоже, что это не вещь в Apache.

Я не знаю метода проверки существования конкретной директивы. (Вы можете проверить наличие целых модулей, используя <IfModule>, но RewriteLog/RewriteLogLevel является частью mod_rewrite в Apache 2.2 и LogLevel является частью ядро в Apache 2.4, так что, к сожалению, это нам не помогает.)

Однако мы можем проверить версию Apache, используя <IfVersion> и соответствующие директивы обработки.

Например, LogLevel доступен с версии 2.3.6 и новее:

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

В ! префикс во второй директиве просто меняет значение. Вместо этого это можно было бы записать как <IfVersion < 2.3.6>.