Как проверить наличие директивы в 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.

3
задан 22 July 2017 в 03:01
1 ответ

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

Однако,мы можем проверить версию Apache с помощью и соответственно обработать директивы.

Например, 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>

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

3
ответ дан 3 December 2019 в 06:27

Теги

Похожие вопросы