如何检查 Apache 2.2 中指令的存在

如何检查 Apache 2.2 中指令的存在

我正在尝试编辑一个配置文件,以便它可以同时在 Apache 2.2 和 Apache 2.4 上运行。

该文件最初是为 Apache 2.2 编写的,包含以下配置:

RewriteLogLevel 3
RewriteLog /var/log/httpd/apache_rewrite_log

但是,RewriteLogLevelApache 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 中似乎不存在这个问题。

答案1

我不知道有一种方法可以检查特定指令的存在。(您可以使用 检查整个模块是否存在<IfModule>,但RewriteLog/RewriteLogLevel是 Apache 2.2 中 mod_rewrite 的一部分,LogLevel也是在 Apache 2.4 中,所以不幸的是这对我们没有帮助。)

<IfVersion>但是,我们可以使用并相应地处理指令来检查 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>

第二条指令的前缀!只是反转了含义。可以将其写为<IfVersion < 2.3.6>

相关内容