写一个apache配置,条件基于apache版本

mat*_*mat 2 configuration web-server conditional apache-2.2 apache-2.4

我想为 apache 服务器编写一个配置,它应该适用于 apache-2.2 和 -2.4 而无需更改。由于 v2.4 中有很多必须加载的新模块,以及一些更改的指令,我需要一些条件语句。我想要的是类似的东西

<If ApacheVersion >= 2.4>
  LoadModule mod_only_in_2.4.so
</If>
Run Code Online (Sandbox Code Playgroud)

但我还没有找到正确的表达方式。有人可以指出我正确的方向吗?

澄清我的动机:我正在开发一个服务器,我希望能够将其复制到服务器上并在没有进一步依赖主机的配置的情况下运行。而且由于机器可以有任一版本的 apache,我想要一个在这两种情况下都可以使用的配置。

Mic*_*ton 6

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

例如:

<IfModule mod_authz_core.c>
Require all granted
</IfModule>

<IfModule !mod_authz_core.c>
Order deny,allow
Allow from all
</IfModule>
Run Code Online (Sandbox Code Playgroud)

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

作为系统管理员,您必须为 Apache 2.2 和 2.4 维护不同的配置;没有办法解决这个问题。幸运的是,每个配置管理系统都使这相对容易,如果您还没有使用这样的系统,那么您应该使用。

  • 在这种情况下,您不会像这样在 Apache 配置文件中解决它。也许你应该澄清你的问题。 (2认同)

小智 5

如果mod_version已加载,它在 Apache 2.2 和 2.4 中应该默认可用(尽管默认情况下未加载),您可以使用该<IfVersion>指令来检查 Apache 的(并且仅是 Apache 的)版本:

<IfVersion >= 2.3>
    # this happens only in versions greater or
    # equal 2.3.0.
</IfVersion>
Run Code Online (Sandbox Code Playgroud)

从文档中获取的示例。