2009-02-15 15 views
14

लिनक्स सिस्टम पर अपाचे 2 का उपयोग करना mod_vhost_alias का उपयोग करके एकाधिक वर्चुअल डॉक्यूमेंट रूट का एक तरीका है?अपाचे एकाधिक वर्चुअल डॉक्यूमेंट रूट

यह नामकरण किया जाता है सम्मेलन मैं वर्तमान में उपयोग कर रहा हूँ और चाहते हैं उपयोग करने के लिए जारी रखने के लिए:

host     directory 
127.0.0.1 domain  domain.com 
127.0.0.1 sub.domain domain.com_sub 
फिर httpd.conf की मेरी vhosts खंड में

मेरे पास है:

NameVirtualHost 127.0.0.1 

<VirtualHost 127.0.0.1> 
    VirtualDocumentRoot /var/www/%0.0.com 
</VirtualHost> 

<VirtualHost 127.0.0.1> 
    VirtualDocumentRoot /var/www/%2.0.com_%1 
</VirtualHost> 

समस्या के साथ यह तब होता है जब मैं sub.domain पर जाता हूं अपाचे त्रुटि लॉग दिखाता है कि यह /var/www/sain.domain.com की बजाय /var/www/domain.com_test की तलाश में है जो मुझे विश्वास दिलाता है कि यह केवल पहले नियम को पढ़ता है और फिर विफल रहता है, लेकिन मैं इसे क्या करना चाहता हूं वह किसी भी दस्तावेज़ रूट का उपयोग करता है जो या तो संतुष्ट करता है दो वर्चुअल डॉक्यूमेंट रूट नियमों में से।

+4

मैं आप इस समस्या को हल संभालने हूँ, लेकिन मैं के लिए नीचे दिए गए पोस्ट किया है पूर्णता, क्योंकि यह Google खोजों में आता है। आप इस प्रश्न को उत्तर के रूप में चिह्नित करना चाहते हैं? – starmonkey

उत्तर

13

अपाचे आमतौर पर पहला वर्चुअल होस्ट चुनेंगे जिसका ServerName या ServerAliasHost HTTP शीर्षलेख में दिए गए होस्ट नाम से मेल खाता है। आपके मामले में, चूंकि आपके पास ServerName निर्देश नहीं हैं, इसलिए अपाचे को नकली सर्वर नाम पर आईपी पते पर एक रिवर्स डीएनएस लुकअप का उपयोग किया जाता है, और यह मानते हुए कि रिवर्स डीएनएस डोमेन.com की ओर जाता है, जो मेल नहीं खाता है, अपाचे तब डिफ़ॉल्ट हो जाता है पहला आभासी मेजबान। जटिल लगता है, मुझे पता है ... नीचे की रेखा है, आपको कॉन्फ़िगरेशन स्पष्ट करने के लिए ServerName और ServerAlias का उपयोग करना चाहिए।

NameVirtualHost 127.0.0.1 
<VirtualHost 127.0.0.1> 
    ServerName domain.com 
    ServerAlias www.domain.com 
    VirtualDocumentRoot /var/www/%0 
</VirtualHost> 
<VirtualHost 127.0.0.1> 
    ServerName sub.domain.com 
    ServerAlias *.domain.com 
    VirtualDocumentRoot /var/www/%2.%3_%1 
</VirtualHost> 

कि /var/www/domain.comhttp://domain.com और /var/www/www.domain.com के लिए http://www.domain.com, जो दोनों के पहले vhost द्वारा सेवा कर रहे हैं, और /var/www/sub.domain.com के लिए http://sub.domain.com, /var/www/blah.domain.com के लिए http://blah.domain.com के लिए इतने पर इस्तेमाल करना चाहिए, और इस तरह के और अधिक कुछ की कोशिश करो।

+0

यह मेरा दिन बचाया। मैं वर्चुअल डॉक्यूमेंट रूट परिभाषाओं के साथ दो वर्चुअलहोस्ट फ़ाइलों के बीच स्विच कर रहा था। मुझे पता था कि एक बेहतर तरीका होना चाहिए और आपने इसे समझ लिया। धन्यवाद! –

+0

समाधान ने मेरी समस्या हल की। लेकिन मेरे पास कुछ विशेष उप डोमेन के लिए एक नया सवाल है, मुझे कुछ विशेष कॉन्फ़िगरेशन की आवश्यकता है, जैसे जेके कॉन्फ़िगरेशन जोड़ें, या एक अनुकूलित लॉग फ़ाइल सेट करें। हम वह कैसे कर सकते है? – Stony

+0

@ स्टॉनी मैं [webmasters.SE] या शायद [एसएफ] पर पूछने का सुझाव देता हूं। –

0

मैं इस कॉन्फ़िगरेशन के साथ क्या देख रहा हूं यह है कि $ _SERVER ['DOCUMENT_ROOT']/var/www/html पर इंगित कर रहा है और vhost के दस्तावेज़ रूट पर नहीं है। अजीब।

अद्यतन (2010-07-24):

मैं सिर्फ एक ब्लॉग पोस्ट कैसे सेटअप अपने http सबूत सर्वर http://www.devcha.com/2010/07/how-to-setup-your-http-proof-server.html

2

ओपी और "/ var के साथ इस मुद्दे के बारे में को पत्र लिखा/www/html "सेट किया जा रहा है:

मुझे यह समस्या% 2 के बजाय% 1 का उपयोग कर रही थी। यहां मेरा कामकाजी उदाहरण है:

ServerAlias www.*.org.au 
UseCanonicalName Off 
VirtualDocumentRoot /path/to/sites/%2/pub 

आशा है कि किसी की सहायता करें!

मैंने mod_vhost_alias docs में "निर्देशिका नाम इंटरपोलेशन" पर दस्तावेज़ पढ़े।

4

जब आप '।' रखना चाहते हैं तो आपको बैकरेफर को अर्हता प्राप्त करनी होगी। फ़ाइल पथ में। तो आपको इसे इस तरह की आवश्यकता है:

VirtualDocumentRoot /var/www/%2.0.%3_%1 
0

मुझे अंततः एक कॉन्फ़िगरेशन मिला जो लचीला सबडोमेन निर्माण की अनुमति देता है। अपने जड़ देव डोमेन 3 भागों dev.example की तरह है, तो

mod_vhost_alias

पर अपाचे डॉक्स देखें।कॉम आप रूट डोमेन से पहले सब कुछ के लिए प्लेसहोल्डर के रूप में %-4+ का उपयोग कर सकते हैं। यदि इसमें 4 भाग हैं, तो %-5+ का उपयोग करें।

<VirtualHost *:80> 
    VirtualDocumentRoot "/var/www/%-4+/webroot" 
    ServerName www.dev.example.com 
    ServerAlias *.dev.example.com 
    php_admin_value auto_prepend_file /var/www/setdocroot.php 
</VirtualHost> 

इस तरह आप /var/www/sub.domain/webroot नाम के एक निर्देशिका बनाने और यूआरएल sub.domain.dev.example.com साथ पहुँच सकते हैं।

लाइन php_admin_value auto_prepend_file /var/www/setdocroot.php तरह OSX 10.9+

यहाँ कुछ सिस्टम पर docroot ठीक करता है setdocroot.php की सामग्री है:

<?php 
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']); 
?> 
संबंधित मुद्दे