2012-03-13 9 views
29

これは、別のファイルが存在する場合はそのファイルをインクルードする必要がある共有設定ファイル用ですが、それ以外の場合は動作します。私はファイルが存在しないときにエラーを生成せずに、Apache設定にファイルを含めるにはどうすればよいですか?

Include foo.conf 

を行うと、foo.confが存在しない場合は、Apacheは文句を言うでしょう:より良い方法があるかもしれませんが

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

答えて

46

私は、巧妙な解決策を考え出しました。これらの文字のいずれかを大括弧で囲むと、Apacheはその文字を大域パターンとして扱います。これにより、エラーを発生させることなく0個のファイルを照合することができます。例:

Include foo.con[f] 
+3

ニーストリック。 '*'を使うこともできます。あなたのconfファイルをユニークなフォルダに置いておき、 'Include myfolder/*。conf'のように入れることをお勧めします。 –

+2

本当に賢い!私はより少しリスクが低いというよりむしろ[f]を好む – fedmich

+0

@fedmich。 *を使用すると、複数のインクルードが予期しない順序でインクルードされる可能性があります。 – user3183018

30

http://httpd.apache.org/docs/2.4/mod/core.html#includeによると、あなたは "IncludeOptional" を使用することができます

また、次のコマンドは、単にファイルやディレクトリを行方不明の場合には無視されます。

IncludeOptionalのconf /のバーチャルホスト/*/*.conf

+4

注:これはApache 2.3.6以降でのみ有効です(事実上2.4+) –

+0

IncludeOptionalの重要な点は、glob演算子を使用しないリテラルパスを指定すると間違いなくエラーになりますそれはそのパスを見つけられません(ドキュメントはそれを明確にしません)。さもなければ、IncludeOptionalを持つものが静かに無視される間、インクルードとの不一致の球状パスはエラーになります。 –

+4

私は期待どおり完全には動作していないようです。 'IncludeOptional/opt/data/sites/*/conf/apache.conf' /opt/data/sitesのディレクトリにディレクトリ 'conf'がないと失敗します。 私は、すべてのサイトに対して 'conf'ディレクトリを作成しようとしました。しかし、まだ運がない。以前にRussel Davisが述べたように、ファイルの部分はワイルドカードである必要があります。だから今私は持っている: 'IncludeOptional/opt/data/sites/*/conf/vhost- *。conf' –

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> 
関連する問題