如何在Apache配置中包含文件而不会在不存在时生成错误?

Rus*_*vis 39 apache

这适用于共享配置文件,如果存在,则应包含另一个文件,但仍然可以.如果我做

Include foo.conf
Run Code Online (Sandbox Code Playgroud)

并且foo.conf不存在,apache会抱怨:

could not open document config file /etc/httpd/conf/foo.conf
Run Code Online (Sandbox Code Playgroud)

Rus*_*vis 57

我提出了一个聪明的解决方案,尽管可能有更好的方法.将其中一个字符放在括号中,以便Apache将其视为glob模式,允许匹配零文件而不会导致错误.例如:

Include foo.con[f]
Run Code Online (Sandbox Code Playgroud)

  • 确实聪明!我更喜欢[f]而不是*,因为它的风险要小一些 (5认同)
  • 好戏.你也可以使用`*`.我建议把你的conf文件放在一个unike文件夹中,并包括这样的'Include myfolder/*.conf` (3认同)

use*_*437 41

根据http://httpd.apache.org/docs/2.4/mod/core.html#include,您可以使用"IncludeOptional":

或者,如果缺少文件或目录,将忽略以下命令:

IncludeOptional conf/vhosts/*/*.conf

  • 注意:这仅适用于Apache 2.3.6及更高版本(有效2.4+) (4认同)
  • 它似乎没有像我期望的那样完全发挥作用.我开始尝试这个:`IncludeOptional/opt/data/sites/*/conf/apache.conf`如果/ opt/data/sites中的任何目录没有目录'conf',则会失败.所以,我尝试为所有网站创建'conf'目录.但仍然没有运气.如前面提到的Russel Davis所述,文件部分需要是通配符.所以现在我有:'IncludeOptional/opt/data/sites/*/conf/vhost - *.conf` (4认同)
  • 关于IncludeOptional的关键是,如果你给它一个没有glob运算符的文字路径,如果它没有找到那条路径肯定会出错(文档没有说清楚).否则,包含Include的无法匹配的球状路径将出错,而具有IncludeOptional的路径将被静默忽略. (2认同)
  • 对于 2.4.30 之前的版本,IncludeOptional 将在缺少路径上失败。解决此问题的最简单方法是其他答案中的 glob 技巧,但将每个路径段的第一个字符用“[]”括起来,这将防止它失败。 (2认同)