2008-09-08 19 views
27

पर आधारित है I Im एक वाइल्डकार्ड डोमेन के लिए उप-निर्देशिका में अनुरोधों को पुनर्निर्देशित करने का प्रयास कर रहा है।
यानी। something.blah.domain.com ->blah.domain.com/somethingअपाचे रीडोराइट सबडोमेन

मुझे नहीं पता कि पुनर्लेखन नियम में उपयोग करने के लिए सबडोमेन नाम कैसे प्राप्त करें।

अंतिम समाधान:

RewriteCond %{HTTP_HOST} !^blah\.domain\.com 
RewriteCond %{HTTP_HOST} ^([^.]+) 
RewriteRule ^(.*) /%1/$1 [L] 

या के रूप में pilif

RewriteCond %{HTTP_HOST} ^([^.]+)\.media\.xnet\.tk$ 

उत्तर

31

से कहा आप अपाचे प्रलेखन से URL Rewriting Guide पर एक नजर है चाहिए।

निम्नलिखित अपरीक्षित है, लेकिन यह चाल करने के लिए कार्य करना चाहिए:

RewriteCond %{HTTP_HOST} ^([^.]+)\.blah\.domain\.com$ 
RewriteRule ^/(.*)$   http://blah.domain.com/%1/$1 [L,R] 

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

+1

धन्यवाद करना चाहिए। एक जादू की तरह काम करता है। – goo

+0

नोट "जब रीवाइट का उपयोग न करें": http://httpd.apache.org/docs/2.2/rewrite/avoid.html#redirect – marcovtwout

3

इस प्रयास करें:

RewriteCond %{HTTP_HOST} (.+)\.blah\.domain\.com 
RewriteRule ^(.+)$ /%1/$1 [L] 

@pilif (टिप्पणी देखें): ठीक है, यह सच है। मैंने अभी एक .htaccess की प्रतिलिपि बनाई है जिसे मैं अपनी परियोजनाओं में से एक पर उपयोग करता हूं। लगता है कि यह एक अलग दृष्टिकोण :)

+0

आपका समाधान blah.domain.com पर रीडायरेक्ट नहीं करता है लेकिन बस कुछ को पुनः लिखता है। .domain.com/कुछ, जो कि मैं मूल प्रश्न कैसे पढ़ता हूं। – pilif

+0

मुझे लगता है कि यह ठीक है अगर वे दोनों एक ही वर्चुअलहोस्ट द्वारा परोसे जाते हैं। विशेष रूप से, ऐसा करने का अर्थ है कि क्लाइंट को पुनर्निर्देशन नहीं दिखता है - वे अभी भी कुछ देखते हैं .blah.example.com। –

1

@Sam

अपने RewriteCond लाइन गलत है। चर का विस्तार% के साथ ट्रिगर किया गया है, $ नहीं।

RewriteCond %{HTTP_HOST} ^([^\.]+)\.media\.xnet\.tk$ 
      ^

कि चाल

+0

एचए! एक चरित्र टाइपो फिर से हमला करता है :( – Sam

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