编写一个基于apache版本的apacheconfiguration

我想写一个configuration的Apache服务器应该工作的Apache-2.2和-2.4没有改变。 由于在v2.4中有很多新的模块需要加载,并且有一些改变了的指令,所以我需要一些条件语句。 我想要的是沿着这条线

<If ApacheVersion >= 2.4> LoadModule mod_only_in_2.4.so </If> 

但我还没有find正确的expression。 有人能指出我正确的方向吗?

澄清我的动机:我正在开发一个服务器,我希望能够复制到服务器上并运行,而不需要依赖主机的configuration。 由于机器可以有任何版本的Apache,我想要在两种情况下工作的configuration。

你应该检查模块,而不是Apache版本。

例如:

 <IfModule mod_authz_core.c> Require all granted </IfModule> <IfModule !mod_authz_core.c> Order deny,allow Allow from all </IfModule> 

请注意,您无法事先猜测某人是否具有特定的Apache版本; 这是由系统pipe理员来确保正确的模块被加载。 作为开发人员,您真正需要担心的是您正在提供正确的指令,具体取决于可用的模块。

作为系统pipe理员,您将不得不为Apache 2.2和2.4维护不同的configuration; 这是没有办法的。 幸运的是,每个configurationpipe理系统都使得这个过程相对简单,如果你还没有使用这样的系统,你应该是。

如果加载了mod_version ,默认情况下(尽pipe默认情况下没有加载)在Apache 2.2和2.4中都可以使用,那么可以使用<IfVersion>指令来检查Apache的(也是唯一的)Apache版本:

 <IfVersion >= 2.3> # this happens only in versions greater or # equal 2.3.0. </IfVersion> 

从文档中取得的示例。

这就是我最终做的事情:我编辑了我的开始脚本来设置一个指定apache版本的variables

 apache_version_string=`$apache_bin -v|grep -oP "Apache/(\d\.\d)"` if [[ $apache_version_string == "Apache/2.2" ]]; then server_flags=$server_flags" -DAPACHEv22" else if [[ $apache_version_string == "Apache/2.4" ]]; then server_flags=$server_flags" -DAPACHEv24" fi fi 

并在Apacheconfiguration我检查了这些定义

 <IfDefine APACHEv24> LoadModule authz_core_module /usr/lib/apache2/mod_authz_core.so </IfDefine>