我想写一个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>