2012-03-13 27 views

Trả lời

46

tôi đã đưa ra một giải pháp thông minh, mặc dù có thể có một cách tốt hơn. Đặt một trong các ký tự trong dấu ngoặc để Apache sẽ coi nó như là một mẫu hình cầu, được phép so khớp các tệp zero mà không gây ra lỗi. Ví dụ:

Include foo.con[f] 
+3

đẹp lừa. Bạn cũng có thể sử dụng '*'. Tôi sẽ khuyên bạn nên đặt các tập tin conf của bạn trong một thư mục không giống nhau và bao gồm như thế này 'Bao gồm myfolder/*. Conf' –

+2

Clever thực sự! Tôi thích [f] thay vì * như một chút ít rủi ro hơn – fedmich

+0

@fedmich. Ý tưởng hay, khi sử dụng * có thể khiến nhiều người bị đưa vào một thứ tự không mong muốn có thể gây ra hành vi bất ngờ khi có vấn đề. – user3183018

30

Theo http://httpd.apache.org/docs/2.4/mod/core.html#include bạn có thể sử dụng "IncludeOptional":

Ngoài ra, lệnh sau sẽ chỉ được bỏ qua trong trường hợp thiếu tập tin hoặc thư mục:

IncludeOptional conf/vhosts /*/*.conf

+4

Lưu ý: Điều này chỉ hoạt động trong Apache 2.3.6 và mới hơn (hiệu quả 2.4+) –

+0

Điều quan trọng về IncludeOptional là nếu bạn cung cấp cho nó một đường dẫn chữ không có toán tử glob, nó chắc chắn sẽ lỗi nếu nó không tìm thấy đường dẫn đó (các tài liệu không làm rõ điều đó). Nếu không, một đường dẫn hình cầu chưa từng có với Bao gồm sẽ lỗi trong khi một với IncludeOptional sẽ được bỏ qua âm thầm. –

+4

Nó dường như không hoạt động hoàn toàn như tôi mong đợi. Tôi bắt đầu với việc thử điều này: 'IncludeOptional/opt/data/sites/*/conf/apache.conf' Không thành công nếu bất kỳ direcotry trong/opt/data/sites không có thư mục 'conf'. Vì vậy, tôi đã thử tạo thư mục 'conf' cho tất cả các trang web. Nhưng vẫn không có may mắn. Như đã đề cập trước đó bởi Russel Davis, phần tệp cần phải là một ký tự đại diện. Vì vậy, bây giờ tôi có: 'IncludeOptional/opt/data/sites/*/conf/vhost- *.conf' –

2

Tôi đã thử giống Wouter Van Vliet nhưng tôi vẫn gặp lỗi. Sau đó, tôi tìm thấy this link. Tôi đã thêm đoạn mã này vào số /etc/apache2/apache2.conf của mình và nó hoạt động như một sự quyến rũ!

Lưu ý: Bạn cần mod_perl cho nó!

Đây là mã:

<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> 
Các vấn đề liên quan