Я пытаюсь отредактировать файл конфигурации, чтобы он работал одновременно на 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>
.