【发布时间】:2012-03-13 18:42:15
【问题描述】:
这是一个共享配置文件,如果它存在,它应该包含另一个文件,但在其他情况下仍然可以工作。如果我这样做了
Include foo.conf
而且 foo.conf 不存在,apache 会报错:
could not open document config file /etc/httpd/conf/foo.conf
【问题讨论】:
标签: apache
这是一个共享配置文件,如果它存在,它应该包含另一个文件,但在其他情况下仍然可以工作。如果我这样做了
Include foo.conf
而且 foo.conf 不存在,apache 会报错:
could not open document config file /etc/httpd/conf/foo.conf
【问题讨论】:
标签: apache
我想出了一个聪明的解决方案,尽管可能有更好的方法。将其中一个字符放在括号中,以便 Apache 将其视为 glob 模式,允许匹配零个文件而不会导致错误。例如:
Include foo.con[f]
【讨论】:
*。我建议将您的 conf 文件放在一个 unike 文件夹中,并像这样包含Include myfolder/*.conf
No matches for the wildcard 'extra.con[f]' in '/home/www/site', failing。但是下面的IncludeOptional 答案绝对有效!
根据http://httpd.apache.org/docs/2.4/mod/core.html#include,您可以使用“IncludeOptional”:
或者,如果丢失文件或目录,以下命令将被忽略:
包括可选的 conf/vhosts/*/*.conf
【讨论】:
IncludeOptional /opt/data/sites/*/conf/apache.conf 如果 /opt/data/sites 中的任何目录没有目录“conf”,则会失败。因此,我尝试为所有站点创建“conf”目录。但仍然没有运气。正如 Russel Davis 之前提到的,文件部分需要是通配符。所以现在我有:IncludeOptional /opt/data/sites/*/conf/vhost-*.conf
IncludeOptional foo.conf
Apache httpd 版本 2.3.6 及更高版本
https://httpd.apache.org/docs/2.4/mod/core.html#includeoptional
【讨论】:
我尝试了与 Wouter Van Vliet 相同的方法,但仍然出现错误。然后我找到了this link。我将此 sn-p 添加到我的 /etc/apache2/apache2.conf 中,它就像一个魅力!
注意:你需要 mod_perl !
代码如下:
<perl>
use File::stat;
foreach $file (glob '/srv/www/vhosts/*/conf/vhost.conf') {
my $stat = stat($file);
if ($stat->uid != 0 || $stat->gid != 0) {
warn "$file is not owned by root:root, skipping!\n";
next;
}
if ($stat->mode & 0002) {
warn "$file is world-writable, skipping!\n";
next;
}
push @Include, $file;
}
</perl>
【讨论】: