2008-12-05 13 views
18

शीर्षक यह सब कुछ कहता है। :-) मेरे पास बहुत सारे आभासी मेजबान हैं और मैं httpd.conf फ़ाइल के शीर्ष पर एक एकल पुनर्लेखन ब्लॉक रखना चाहता हूं जो यूआरएल को फिर से लिखता है इससे कोई फर्क नहीं पड़ता कि अनुरोध किस वर्चुअल होस्ट को निर्देशित किया जा सकता है। मैं यह कैसे करूँगा?मैं अपाचे में ग्लोबल रीवाइटकॉन्ड/रीवाइट्रूएल को कैसे कार्यान्वित कर सकता हूं जो सभी वर्चुअल होस्ट पर लागू होता है?

मुझे this मिला लेकिन मेरा प्रश्न वही है: मैं .htaccess फ़ाइलों का उपयोग किए बिना और प्रत्येक वर्चुअल होस्ट के लिए कुछ अन्य क्रियाओं के बिना ऐसा कैसे कर सकता हूं?

ओएमजीटीआईए!

+0

पवित्र बकवास। मैंने सबको फेंक दिया है। – hourback

+0

तो ऐसा लगता है कि आपके पास है। – UnkwnTech

उत्तर

9

माता पिता दायरे में RewriteOptions InheritDown निर्दिष्ट करें (जैसे कि httpd के रूप में

RewriteEngine On 
RewriteOptions Inherit 

क्लिक http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html: मुख्य सर्वर सेटिंग्स आभासी मेजबान के लिए लागू करने के लिए, आप प्रत्येक <VirtualHost> अनुभाग में निम्न निर्देशों जगह चाहिए। conf) बच्चे को वर्चुअल होस्ट में संशोधित किए बिना अपने नियम लागू करने के लिए।

यह केवल आभासी मेजबान जहां RewriteEngine निर्देश on के लिए निर्धारित है पर काम करेंगे:

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

(source)

अपाचे इस का समर्थन करता है 2.4.8 (मूल प्रश्न के समय में उपलब्ध नहीं) के बाद से।

प्रलेखन से RewriteOptions के लिए:

InheritDown

यदि यह विकल्प सक्षम किया गया है, सभी बच्चे विन्यास वर्तमान कॉन्फ़िगरेशन के विन्यास प्राप्त कर लेगा। यह सभी बाल विन्यास में रिवाइटऑप्शन इनहेरिट निर्दिष्ट करने के बराबर है। अभिभावक-बाल संबंधों को कैसे प्रबंधित किया जाता है, इस बारे में अधिक जानकारी के लिए इनहेरिट विकल्प देखें। अपाचे HTTP सर्वर 2.4.8 और बाद में उपलब्ध है।

InheritDownBefore

ऊपर InheritDown, लेकिन मौजूदा दायरे से नियमों की तरह किसी भी बच्चे के दायरे में निर्दिष्ट नियमों से पहले ही लागू है। अपाचे HTTP सर्वर 2.4.8 और बाद में उपलब्ध है।

IgnoreInherit

यह विकल्प सभी नियमों कि एक माता पिता InheritDown या InheritDownBefore निर्दिष्ट करने से विरासत में मिला दिया जाएगा अनदेखी करने के लिए वर्तमान और बच्चे विन्यास बाध्य करती है। अपाचे HTTP सर्वर 2.4.8 और बाद में उपलब्ध है।

(http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewriteoptions)

+0

ध्यान दें कि इसे अभी भी वर्चुअल होस्ट सेक्शन में 'रीवाइटइंजिन ऑन' सेट की आवश्यकता है। – brocksamson

+1

"नोट करें कि कॉन्फ़िगरेशन को फिर से लिखना वर्चुअल होस्ट्स द्वारा विरासत में नहीं मिलता है। इसका मतलब है कि आपको प्रत्येक वर्चुअल होस्ट के लिए निर्देश पर एक रिवाइटइंजिन होना चाहिए जिसमें आप रीराइट नियमों का उपयोग करना चाहते हैं।" https://httpd.apache.org/docs/2.4/mod/mod_rewrite.html –

5

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

+0

मेरे लिए सबसे अच्छा जवाब :) क्योंकि यह mod_rewrite तक सीमित नहीं है, लेकिन किसी भी अपाचे सुविधा/निर्देश के साथ काम करता है। – CedX

9

लग रहा है सरल संभव समाधान की तरह प्रत्येक VirtualHost निर्देश के लिए

RewriteOptions inherit 

जोड़ना है। यह htaccess फ़ाइलों के साथ गड़बड़ करने से कम से कम सरल है। अपाचे इस तथ्य पर बहुत स्पष्ट है कि

डिफ़ॉल्ट रूप से, कॉन्फ़िगरेशन पुनर्लेखन विरासत में नहीं है। इसका अर्थ यह है कि को पर में प्रत्येक वर्चुअल होस्ट के लिए निर्देश का उपयोग करने के लिए एक रेवाइटइंजिन होना आवश्यक है, जिसका आप इसका उपयोग करना चाहते हैं। (http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html)

और जाहिरा तौर पर जिस तरह से डिफ़ॉल्ट बदलने के लिए, बच्चे (vhost या निर्देशक) में RewriteOptions के माध्यम से है, इसलिए आप प्रत्येक बच्चे में कुछ क्या करना है।

+2

अपाचे 2.4.8 के बाद से आप httpR.conf (या अन्य) का उपयोग 'रिवाइटऑप्शन इनहेरिटडाउन' के साथ कर सकते हैं, यह सभी vhosts में 'रिवाइटऑप्शन इनहेरिट' निर्दिष्ट करने के बराबर है। –

+0

@MatejSnoha, क्या आप इस प्रश्न के समाधान के रूप में अपनी टिप्पणी जमा करना चाहते हैं? यह इस समस्या के समाधान की तलाश में दूसरों के लिए अधिक दृश्यमान हो सकता है। मैं खुद को जांचने की स्थिति में नहीं हूं, लेकिन मुझे यह जानने में दिलचस्पी होगी कि यह दूसरों की मदद करता है या नहीं। – hourback

2

यदि आप केवल नाम के डोमेन भाग में कुछ लिखने की कोशिश कर रहे हैं, उदा। एक सामान्य गलत वर्तनी को ठीक करने के लिए, आपको 'विरासत' विकल्प की भी आवश्यकता नहीं है। मैं सभी अमान्य होस्ट नामों को पकड़ने के लिए एक नाम-वर्चुअल होस्ट सेट अप करता हूं और उन्हें पुनर्निर्देशित करने से पहले उन्हें सही तरीके से पुन: प्राप्त करता हूं।

चूंकि यह रीडायरेक्ट का उपयोग करता है, इसलिए उचित वर्चुअल होस्ट को पुनः लिखने के बाद पाया जाएगा।

Options +Indexes +FollowSymLinks 
RewriteEngine on 
# If it begins with only domain.com, prepend www and send to www.domain.com 
RewriteCond %{HTTP_HOST} ^domain [NC] 
RewriteRule ^(.*) http://www.domain.com$1 [L,R=301] 

# Correct misspelling in the domain name, applies to any VirtualHost in the domain 
# Requires a subdomain, i.e. (serviceXXX.)domain.com, or the prepended www. from above 
RewriteCond %{HTTP_HOST} ^([^.]+\.)dommmmmain\.com\.?(:[0-9]*)?$ [NC] 
RewriteRule ^(.*) %{HTTP_HOST}$1 [C] 
RewriteRule ^([^.]+\.)?domain.com(.*) http://$1domain.com$2 [L,R=301] 

# No-name virtual host to catch all invalid hostnames and mod_rewrite and redirect them 
<VirtualHost *> 
    RewriteEngine on 
    RewriteOptions inherit 
</VirtualHost> 
+0

मैंने सोचा था कि आपने कहा था कि आपको "वारिस" विकल्प की भी आवश्यकता नहीं है, फिर भी आप इसे अपने नियम – huyz

+0

में शामिल करते हैं, हम इसका उपयोग हमारे डोमेन नाम की वर्तनी को ठीक करने के लिए करते हैं।उस स्थिति में, वाइल्डकार्ड वर्चुअलहोस्ट के लिए केवल 'विरासत' होना पर्याप्त है। यदि आपके पास अधिक जटिल रीराइट विकल्प हैं, तो आपको प्रत्येक वर्चुअलहोस्ट में 'उत्तराधिकारी' शामिल करने की आवश्यकता हो सकती है। –

+0

आह, तो आप का मतलब था कि आपको प्रत्येक वर्चुअलहोस्ट में 'विरासत' विकल्प की आवश्यकता नहीं है। समझ गया। – huyz

0

मैं हमेशा निर्देशों के लिए एक "कैच-ऑल" vhost मैं बोर्ड, की तरह भर में चाहता था ......

Listen 80 
NameVirtualHost *:80 

<VirtualHost *:80> 
ErrorLog "/var/log/apache2/error_log" 
</VirtualHost> 

<VirtualHost *:80> 
ServerName alloftherestoftheVHosts.com 
DocumentRoot "/ServiceData/......... 
............ 

का उपयोग किया है और यह हमेशा लग रहा था काम करने के लिए। .. त्रुटि लॉग ठीक से मिल रहे थे, आदि ...... लेकिन यह संभव है कि यह पहले/विरोधाभासी/दिमागी निर्देशों का नतीजा था।

व्यक्तिगत नोट .. जो भी अपाचे कॉन्फ़िगरेशन स्कीमा और सिंटैक्स का सपना देखता है वह डिंगबैट था, या डिंगबैट का एक समूह था, जिन्होंने अपनी गुफा में बहुत अधिक समय बिताया .... पूरी चीज को एक्सक्साइज्ड और एक्सएमएलआईज्ड किया जाना चाहिए, या कुछ कुछ! हालांकि वे दोनों बेतहाशा अलग ... Cherokee की हैलो-किट्टी सेटअप प्रक्रिया .. क्रूरतापूर्वक संक्षिप्त NGinx config करने के लिए कर रहे हैं .... दोनों इतना अधिक तार्किक ..

11

डिफ़ॉल्ट रूप से, mod_rewrite विन्यास की सेटिंग हैं, मुख्य सर्वर संदर्भ वर्चुअल होस्ट द्वारा विरासत में नहीं हैं।अधिक जानकारी प्राप्त करने

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