.htaccess निर्देशिका में उपडोमेन को फिर से लिखना


83

क्या किसी निर्देशिका के उप डोमेन को फिर से लिखने के लिए .htaccess का उपयोग करना संभव है?

उदाहरण:

की सामग्री को दर्शाता है

जवाबों:


107

इसे अपने .htaccess फ़ाइल में डालने का प्रयास करें:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]

एक अधिक सामान्य नियम के लिए (जो किसी भी उप-डोमेन के साथ काम करता है, न कि सिर्फ sub) इसके साथ अंतिम दो पंक्तियों को बदलें:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]

3
अंसारी का समाधान काम करेगा, हालांकि, जब मैं नेविगेट करता हूं http://test.domain.com, तो URL मुझे पुनर्निर्देशित करता है http://test.domain.com/subdomains/test/। क्या /subdomains/test/अंत में दिखाए बिना यह संभव है ?
एरिक Djupvik

2
उस स्थिति में, मेरा मानना ​​है कि आपको mod_proxy का उपयोग करना होगा और Pइसके अलावा एक ध्वज निर्दिष्ट करना होगा L
अंसारी

1
नहीं, यह पुनर्निर्देशित करता है http://test.domain.com/subdomains/test/, जब मैं केवल यह दिखाना चाहता हूंhttp://test.domain.com/
एरिक Djupvik

1
मैं नहीं देख सकता कि यह कैसे पुनर्निर्देशित करता है test.domain.com/subdomains/test- शायद यहां कुछ और चल रहा है। क्या आप RewriteBase /सही जोड़ सकते हैं RewriteEngine on? इसके अलावा, यदि आप इसे दिखाना चाहते हैं तो आपको test.domain.commod_proxy और [P]ध्वज का उपयोग करना होगा ।
अंसारी

1
मैं इसे यहाँ @ anubhava के उत्तर का उपयोग कर काम करने में सक्षम था: stackoverflow.com/a/22395008/128984
Micah

50

मैं एक mod_rewrite विशेषज्ञ नहीं हूं, मैं अक्सर इसके साथ संघर्ष करता हूं, लेकिन मैंने अपनी साइटों में से एक पर यह किया है, इसे आपकी परिस्थितियों के आधार पर अन्य झंडे आदि की आवश्यकता हो सकती है। मैं इसका उपयोग कर रहा हूं:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L] 

साइट के बाकी हिस्सों के लिए कोई अन्य पुनर्लेखन नियम आपके उपडोमेन पुनर्लेखन के साथ हस्तक्षेप करने से रोकने के लिए बाद में जाना चाहिए।


मैं बस यही कहूँगा। मैंने पाया कि यह सेटिंग मेरे उत्तर के समान ही सही है
चेतबहना

5
एक संदर्भ के रूप में, अगर किसी के साथ शुरुआत होती .htaccessहै, जो इस पृष्ठ पर आता है (जैसे मैंने किया), इसके अलावा वास्तविक .htaccessफ़ाइल बनाने के लिए, इसे प्रभावी बनाने के लिए, आपको AllowOverrideअपनी VirtualHostसेटिंग्स में सेट करने की आवश्यकता है ( stackoverflow.com/a/22819550/1657502 ) , अपाचे के rewriteमॉड्यूल को सक्षम करें और फिर अपाचे को पुनः आरंभ करें ( stackoverflow.com/a/5758551/1657502 )
एंटोनियो विनीसियस मेनेजेस मेडी

यदि आप उप-डोमेन पर जाने के लिए www का उपयोग करते हैं तो यह अभ्यस्त काम नहीं करेगा। @ मिन्ह समाधान सभी मामलों में काम करेगा।
रोहन ख़ुद

@ रोहनकहुड, क्या आपका मतलब है कि आप www.example.com और example.com को अलग-अलग सामग्री परोसना चाहते हैं? क्योंकि आमतौर पर, एसईओ के लिए, आपके पास www.example.com होना चाहिए, उदाहरण के लिए एक स्थायी रीडायरेक्ट जारी करना। com या इसके विपरीत।
ली कोवलकोव्स्की

1
@RohanKhude www एक उपडोमेन के उपडोमेन के रूप में भी कुछ ऐसा है जो आपको डीएनएस स्तर पर काम करने के लिए प्राप्त करना होगा, है ना? मुझे लगता है कि आपकी उम्मीद है कि यह किसी भी मनमाने उपडोमेन के लिए काम करना चाहिए गलत है। मिन्ह का जवाब ( stackoverflow.com/a/41389905/30945 ) मानता है कि आपका .htaccess कॉन्फ़िगरेशन 1 और केवल 1 सबडोमेन का समर्थन करता है, इसलिए उस पहलू में कम मजबूत है। मेरा समाधान आपकी ज़रूरत के अनुसार कई उप-डोमेन का समर्थन करता है, लेकिन हाँ, आपको प्रत्येक समर्थित उप-डोमेन को स्पष्ट रूप से परिभाषित करने की आवश्यकता है, लेकिन एक वैकल्पिक www.उपसर्ग शायद फिर से लिखने वाले की तुलना में पुनर्निर्देशन के माध्यम से सर्वोत्तम रूप से समर्थित है।
ली कोवलकोव्स्की

18

आप एक उप-फ़ोल्डर में एक उपडोमेन को फिर से लिखने के लिए .htaccess में निम्नलिखित नियम का उपयोग कर सकते हैं :

RewriteEngine On

 # If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 # Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

लाइन-बाय-लाइन स्पष्टीकरण:

  RewriteEngine on

ऊपर की लाइन सर्वर को यूआरएल को फिर से लिखने के लिए इंजन चालू करने के लिए कहती है।

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

यह पंक्ति उस रीट्राइट के लिए एक शर्त है, जहां हम रेगेक्स पैटर्न का उपयोग करके HTTP होस्ट के खिलाफ मैच करते हैं। शर्त कहती है कि यदि होस्ट sub.domain.com है, तो नियम को निष्पादित करें।

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

नियम http://sub.domain.com/foo से मेल खाता है और आंतरिक रूप से इसे http://sub.domain.com/folder/foo पर पुनर्निर्देशित करता है

अपने उपडोमेन और फोल्डर के साथ उप.डोमेन.कॉम को उस फोल्डर के नाम से बदलें जिसे आप अपने उपडोमेन को इंगित करना चाहते हैं।


1
यह मेरे लिए सही उत्तर है - इस बात की व्याख्या कि मैं इस प्रकार यहाँ कैसे पहुँचा। यहां उपखण्ड पुनर्निर्देशन के साथ एक उम्र पुरानी समस्या की तलाश में आ रहा है, जो कि स्पष्ट रूप से टूट गया जब मैंने मुख्य साइट टीएलडी पर एसएसएल स्थापित किया। पुनर्निर्देशन शुरू में अभी भी मुख्य साइट TLD अभी भी और सुरक्षा नियमों को तोड़ने की कोशिश कर रहा था। मुझे जो चाहिए था, वह सबडोमेन (जो पूरी तरह से अलग TLD पर था) को एक ही होस्ट पर रखा गया था, लेकिन मुख्य साइट से दूर था। ऊपर के रूप में एक पुनर्लेखन नियम जोड़ना मुझे मुख्य TLD साइट के तहत होस्ट किए गए फ़ोल्डर में पूर्ण उपडोमेन को अग्रेषित करने में सक्षम बनाता है।
रिचर्ड बोव

8

मेरे पास एक ही समस्या थी, और मुझे इसमें विस्तृत विवरण मिला http://www.webmasterworld.com/apache/3163397.htm

मेरा समाधान (सबडोमेनस सामग्री नामक एक फ़ोल्डर में होनी चाहिए sd_subdomain:

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]

1
यह मेरे लिए काम नहीं करता है, क्या मुझे डोमेन के डीएनएस क्षेत्र में कुछ कॉन्फ़िगर करना चाहिए?
टोटोसाउ

1
@totoaussi आपको उसी सर्वर की ओर इशारा करते हुए एक * A रिकॉर्ड या प्रति उपडोमेन बनाना चाहिए।
पाब्लो टॉरेसीला

4

यह उप फ़ोल्डर में एक ही फ़ोल्डर में रीडायरेक्ट करता है:

.httaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1

3

इस .htaccess फ़ाइल को उपडोमेन फ़ोल्डर में डालने का प्रयास करें:

RewriteEngine On

RewriteRule ^(.*)?$ ./subdomains/sub/$1

यह http://domain.com/subdomains/sub/ पर पुनर्निर्देशित करता है , जब आप केवल इसे http://sub.domain.com/ दिखाना चाहते हैं


सवाल 2012 में पूछा गया था और इसके 8 जवाब हैं। क्या आपका जवाब इस बिंदु पर मूल्य जोड़ता है?
ppovoski

यह समाधान तब भी काम करेगा जब आप सबडोमेन पर जाने के लिए www का उपयोग करते हैं
रोहन खुदे

2

अनुप्रेषित उपडोमेन निर्देशिका:

RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]

0

किसी भी उप डोमेन अनुरोध के लिए, इसका उपयोग करें:

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co 
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co 
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) 
RewriteRule ^(.*)$ /%1/$1 [L] 

बस कुछ फ़ोल्डर को उप डोमेन नाम की आवश्यकता के समान बनाएं। फ़ोल्डर इस तरह मौजूद होना चाहिए: domain.com/sub for sub.domain.com


यह मेरे लिए काम करता है लेकिन यह फ़ाइल नहीं रखता है। उदाहरण के लिए sub.domain.com/index.php थ्रो 404
पाओलो फलोमो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.