2012-03-13 6 views
29

यह एक साझा कॉन्फ़िगरेशन फ़ाइल के लिए है जिसमें मौजूद होने पर एक और फ़ाइल शामिल होनी चाहिए, लेकिन फिर भी अन्यथा काम करें। अगर मैंअपाचे कॉन्फ़िगरेशन में कोई त्रुटि उत्पन्न किए बिना मैं फ़ाइल कैसे शामिल करूं?

Include foo.conf 

करते हैं और foo.conf मौजूद नहीं है, अपाचे शिकायत:

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

उत्तर

46

मैं, एक चतुर समाधान के साथ आया था, हालांकि वहां एक बेहतर तरीका हो सकता है। अक्षरों में से एक को ब्रैकेट में रखें ताकि अपाचे इसे ग्लोब पैटर्न के रूप में पेश करे, जिसे त्रुटि के बिना शून्य फ़ाइलों से मिलान करने की अनुमति है। उदाहरण के लिए:

Include foo.con[f] 
+3

अच्छा चाल:

यहाँ कोड है। आप '*' का भी उपयोग कर सकते हैं। मैं आपकी conf फ़ाइलों को एक समान फ़ोल्डर में डालने की अनुशंसा करता हूं और इसमें शामिल है 'myfolder/*। Conf' –

+2

चालाक वास्तव में शामिल करें! मैं [एफ] बल्कि * थोड़ा कम जोखिम भरा – fedmich

+0

@fedmich पसंद करता हूं। अच्छा विचार, उपयोग करने के रूप में * एकाधिक कारणों को एक अप्रत्याशित क्रम में शामिल करने के लिए शामिल किया जा सकता है जो आदेश के मामले में अप्रत्याशित व्यवहार कर सकता है। – user3183018

30

http://httpd.apache.org/docs/2.4/mod/core.html#include के अनुसार आप इस्तेमाल कर सकते हैं "IncludeOptional":

वैकल्पिक रूप से, निम्न आदेश सिर्फ फाइल या निर्देशिका लापता के मामले में ध्यान नहीं दिया जाएगा:

IncludeOptional conf/vhosts /*/*.conf

+4

नोट: यह केवल अपाचे 2.3.6 में काम करता है और नया (प्रभावी रूप से 2.4+) –

+0

IncludeOptional के बारे में महत्वपूर्ण बात यह है कि यदि आप इसे कोई ग्लोब ऑपरेटर के साथ एक शाब्दिक पथ देते हैं, तो यह निश्चित रूप से त्रुटि होगी यह उस पथ को नहीं ढूंढता है (दस्तावेज़ इसे स्पष्ट नहीं करते हैं)। अन्यथा, Include के साथ एक बेजोड़ गोलाकार पथ त्रुटि होगी, जबकि IncludeOptional के साथ एक चुपचाप अनदेखा किया जाएगा। –

+4

यह पूरी तरह से काम नहीं कर रहा है जैसा कि मैं उम्मीद करता हूं। मैंने इसे आजमाने के साथ शुरू किया: 'समावेशी/ऑप्ट/डेटा/साइट्स/*/conf/apache.conf' जो विफल रहता है यदि किसी भी सख्त में/ऑप्ट/डेटा/साइटों में निर्देशिका 'conf' नहीं है। तो, मैंने सभी साइटों के लिए 'conf' निर्देशिका बनाने का प्रयास किया। लेकिन अभी भी कोई भाग्य नहीं है। जैसा कि पहले उल्लेख किया गया है रसेल डेविस द्वारा, फ़ाइल भाग को वाइल्डकार्ड होना चाहिए। तो अब मेरे पास है: 'समावेशी/ऑप्ट/डेटा/साइट्स/*/conf/vhost- * शामिल करें।conf' –

2

मैंने वाउटर वान 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> 
संबंधित मुद्दे