我正在尝试编辑一个configuration文件,以便在Apache 2.2和Apache 2.4上同时运行。
该文件最初是为Apache 2.2编写的,包含以下configuration:
RewriteLogLevel 3 RewriteLog /var/log/httpd/apache_rewrite_log
但是,Apache 2.4不再支持RewriteLogLevel 。 相反,在这种情况下,我需要使用:
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是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> 。