2009-04-10 24 views
15

यह एक अपाचे प्रश्न है जिसे आप शायद पहले पार कर चुके हैं। मैं एक स्रोत पैकेज चाहता हूं जिसे मैं अपने वर्कस्टेशन, मेरे स्टेजिंग सर्वर और मेरे उत्पादन सर्वर पर तैनात कर सकता हूं, लेकिन इसके लिए यूआरएल क्या था, इसके आधार पर अलग .htaccess सेटिंग्स लोड करने के लिए।मैं एक सशर्त .htaccess ब्लॉक कैसे कर सकता हूं?

ध्यान दें कि मैं एक ifModule कॉल के साथ एक क्लज का उपयोग कर रहा था, लेकिन यह हमारे नए उत्पादन सर्वर के साथ काम नहीं करेगा क्योंकि यह मेरे स्टेजिंग सर्वर के समान मॉड्यूल साझा करता है।

नोट मुझे इन पुनर्लेखों के साथ SetEnv को बंडल करने की आवश्यकता है। वर्तमान में यदि आप रीवाइटकॉन्ड का उपयोग करते हैं, तो यह केवल निम्नलिखित रिवाइट्रूल से संबंधित है, लेकिन नीचे सेटएएनवी नहीं है।

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteBase/

    RewriteCond %{HTTP_HOST} !^localhost 
    RewriteCond %{HTTP_HOST} !^www\. 
    RewriteRule (.*) http://www.%{HTTP_HOST}/$1 [R=301,L] 
</IfModule> 

उत्तर

15
इसके बजाय setenv का उपयोग करने का

, फिर से लिखना के ही वातावरण चर सेटिंग क्षमताओं का उपयोग:

+0

यह ध्यान दिया जाना चाहिए कि अपाचे में php_value निर्देश को पहले उदाहरण में नहीं कहा जा सकता - केवल पर्यावरण चर। दूसरे उदाहरण में, यह सबसे अच्छा विकल्प है क्योंकि आप सचमुच अपने सर्वर को परिभाषित कर सकते हैं। हालांकि, यह केवल तभी काम करता है जब आप पर्यावरण को नियंत्रित करते हैं। यदि आप किसी साझा होस्ट पर हैं, तो आपके पास httpd प्रक्रिया में पैरामीटर पास करने पर नियंत्रण करने का कोई तरीका नहीं है। इसलिए, आप के साथ इसके विपरीत खोजते हैं। –

+1

मैंने पाया कि मैं IfDefine का उपयोग कर सकता हूं क्योंकि मेरा प्रोड सर्वर 100% नियंत्रित है और मैं/etc/sysconfig/httpd OPTION पैरामीटर के साथ गड़बड़ कर सकता हूं और इसे OPTIONS = "- D prod" बना सकता हूं। स्टेजिंग सर्वर पर, जिसे साझा किया गया है, मुझे IfDefine! Prod का उपयोग करना था और उसके बाद एक ifModule expires_module को ढेर करना था। मेरे वर्कस्टेशन पर, मुझे IfDefine का उपयोग करना पड़ा! Prod के बाद IfModule! Expires_module। इसने मुझे एक। Htaccess फ़ाइल दी जो देव, स्टेजिंग/टेस्ट और उत्पादन में काम करता था। –

+0

किंडा भ्रमित, मुझे लगा कि सरल पर्यावरण चर का उपयोग ifdefine पर किया जा सकता है – Dan

1

यहाँ एक सरल उदाहरण है कि पर्याप्त आप इसे बदलने के लिए के लिए अपनी आवश्यकताओं को पूरा करने के लिए किया जाना चाहिए है

RewriteCond %{HTTP_HOST} =foo.com 
RewriteRule^- [E=VARNAME:foo] 

RewriteCond %{HTTP_HOST} =bar.com 
RewriteRule^- [E=VARNAME:bar] 

हालांकि मैं स्टार्टअप पर httpd प्रक्रिया में झंडे पास करके और IfDefine ब्लॉक का उपयोग करके उन्हें ढूंढकर इस तरह की चीज करना पसंद करता हूं।

<IfDefine FOO> 
SetEnv VARNAME foo 
</IfDefine> 

<IfDefine BAR> 
SetEnv VARNAME bar 
</IfDefine> 
+0

क्या यह कामकाजी प्रकार का काम करता है, जहां मैं इसके अलावा एक और रिवाइटकंड जोड़ सकता हूं और अधिक रिवाइट्रूल प्रविष्टियों के साथ, और यह केवल पिछले रिवाइटकंड पर लागू होगा? मेरा मतलब है, सामान्य प्रोग्रामिंग भाषाओं और मार्कअप में आपके पास कुछ प्रकार की स्टार्ट/स्टॉप ब्लॉक है, चाहे वह घुंघराले ब्रेसिज़ हो। लेकिन यहां नहीं –

+0

भी, रिवाइटबेस/महत्वपूर्ण है? –

+0

इस दृष्टिकोण के साथ समस्या यह है कि यह केवल RewriteRule के लिए काम करता है, कोशिश करें और इसे SetEnv या php_value के लिए भी उपयोग करें और यह काम नहीं करता है। यही कारण है कि मैंने IfModule kludge का उपयोग किया। –

5

उबंटू लिनक्स पर, IfDefine के चर

/etc/apache2/envvars 

में स्थापित किया जाएगा और APACHE_ARGUMENTS कहा जाता है।

export APACHE_ARGUMENTS="-D dev" 

... और फिर साथ सर्वर उछाल:

/etc/init.d/apache2 stop 
/etc/init.d/apache2 start 

अन्य प्रणालियों पर: तो, उस फ़ाइल के तल पर मैं जोड़ने के लिए किया था

हालांकि, वहाँ है इस विषय पर एक डेबियन आलेख जो इस here पर चर्चा करता है। उस उदाहरण में, फ़ाइल को संपादित करने के लिए/etc/default/apache2 है और चर को APACHE_DEFINES कहा जाता है।

इसी प्रकार, कुछ प्रणालियों पर यह OPTIONS नामक एक चर है जो /etc/sysconfig/httpd में सेट है।

तो, आपको वास्तव में क्या करना है, यह आपके apache2ctl फ़ाइल में प्रारंभ खंड की तलाश में है। तो, whereis apache2ctl ऐसा करने के लिए शुरू करें कि यह स्क्रिप्ट कहां है, इसे बाहर निकालें और इसमें apache2 निर्देश के साथ प्रारंभ खंड ढूंढें, और देखें कि यह चर OPTIONS, APACHE_ARGUMENTS, APACHE_DEFINES, या कुछ और है। फिर, देखें कि /etc/sysconfig/httpd, /etc/default/apache2, या /etc/apache2/envvars के साथ प्रयोग द्वारा आपको कौन सी फ़ाइल संपादित करने की आवश्यकता है।

संबंधित मुद्दे