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

时间:2012-03-13 18:42:16

标签: apache

这适用于共享配置文件,如果存在,则应该包含另一个文件,否则仍然有效。如果我做

Include foo.conf

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

could not open document config file /etc/httpd/conf/foo.conf

4 个答案:

答案 0 :(得分:56)

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

Include foo.con[f]

答案 1 :(得分:37)

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

  

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

     

IncludeOptional conf / vhosts / * / * .conf

答案 2 :(得分:4)

IncludeOptional foo.conf

Apache httpd版本2.3.6及更高版本

https://httpd.apache.org/docs/2.4/mod/core.html#includeoptional

答案 3 :(得分:2)

我和Wouter Van Vliet一样,但我仍然有错误。然后我找到了this link。我将此代码段添加到我的 /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-&gt;uid != 0 || $stat-&gt;gid != 0) {
            warn "$file is not owned by root:root, skipping!\n";
            next;
        }
        if ($stat-&gt;mode &amp; 0002) {
            warn "$file is world-writable, skipping!\n";
            next;
        }
        push @Include, $file;
    }
</perl>