我正在尝试编辑一个配置文件,以便它可以同时在 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 中似乎不存在这个问题。
答案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>
。