.htaccess रूट URL को उपनिर्देशिका पर पुनर्निर्देशित करता है


246

पाने की कोशिश कर रहा हूँ

www.example.com

सीधे जाने के लिए

www.example.com/store

मैंने कई बिट्स कोड की कोशिश की है और कोई भी काम नहीं करता है।

मैंने क्या कोशिश की है:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.example\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

मैं क्या गलत कर रहा हूं?

जवाबों:


275

आप रूट का प्रतिनिधित्व करने के लिए ^ $ का उपयोग करने वाले एक पुनर्लेखन नियम का उपयोग कर सकते हैं और इस तरह अपनी / स्टोर निर्देशिका में फिर से लिख सकते हैं:

RewriteEngine On
RewriteRule ^$ /store [L]

6
? RewriteRule ^ / $ /index.do [आर]
बार्कले

2
^ / $ का मिलान कभी नहीं होता है इसलिए मुझे लगता है कि ^ /! $ आवश्यक नहीं है।
नाटेस

क्या तब पूर्ण url दिखाना और प्रसंस्करण नियम जारी रखना संभव है? मेरे मामले में, मैं कुछ यूआरएल फिर से लिखता हूं ताकि वे सुंदर हों। यह url example.com रखता है - मैं example.com/store चाहता हूँ और फिर अन्य रीराइट के साथ जारी रखूँगा।
13

मेरे लिए भी ठीक काम करता है।
जितेश सोजितरा

1
अभी हाल ही में मैंने बहुत समय डिबग करने में बिताया क्योंकि यह उबंटू अपाचे 2.4.7 में एक साइट पर काम नहीं करता था। नियम डिबगिंग से पता चलता है कि नियम हिट हो रहा है और एक आंतरिक कमी पैदा कर रहा है। तब यह सिर्फ पार्क करने के लिए लग रहा था और एक इंडेक्स पेज की तलाश में था। यह बताता है कि यदि mod_dir सक्षम है और dir में एक इंडेक्स पेज उम्मीदवार है तो यह mod_rewrite, आपके द्वारा सेट किए गए UNLESS को ओवरराइड करता है: DirectoryCheckHandler On
Gerrit

142

मुझे आश्चर्य हुआ कि किसी ने इसका उल्लेख नहीं किया:

RedirectMatch ^/$ /store/

मूल रूप से, यह रूट और केवल रूट URL को रीडायरेक्ट करता है। इस लिंक से उत्तर की उत्पत्ति हुई


3
धन्यवाद, यह मेरे लिए पहले से ही मौजूद नियम से बहुत काम आया। कोई विवाद नहीं।
थिस्सिस्टिस्ट

1
यह पूरी तरह से काम करता है। साथ ही, यह http और https दोनों को कवर करता है।
सईम शाफ़ायत

3
और यह 301 पुनर्निर्देशित के लिए:RedirectMatch 301 ^/$ /store/
एंड्रिया

हां, यह फिर से लिखना आसान है। धन्यवाद!
ऑर्डन

2
@ और 302 अस्थायी पुनर्निर्देशित के लिए यह और: पुनर्निर्देशन 302 ^ / $ / स्टोर /
अली रूपानी

108

इसे इस्तेमाल करे:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule (.*) http://www.example.com/$1 [R=301,L]
RewriteRule ^$ store [L]

यदि आप एक बाहरी रीडायरेक्ट चाहते हैं (जो रीडायरेक्ट किए गए URL को दिखाने के लिए विजिटिंग ब्राउज़र का कारण बनता है), तो Rवहां भी झंडा सेट करें :

RewriteRule ^$ /store [L,R=301]

4
जो खूबसूरती से काम किया। Sample.com और www.sample.com दोनों www.sample.com/store पर पुनर्निर्देशित हैं। बस मुझे यही चाहिए था। शुक्रिया गंबू, और हर कोई जिसने जवाब दिया। मैंने आपकी प्रतिक्रियाओं को पढ़कर बहुत कुछ सीखा और प्रतिक्रिया की सराहना की।

1
मैं उत्सुक हूं, क्या यह www.example.comपुनर्निर्देशन के बाद यूआरआई के रूप में दिखाई देगा ? यदि नहीं, तो ऐसा करने के लिए इसे कैसे बदला जाएगा?
स्टेफमिकेल

1
Would - और आपका समाधान नीचे दिए गए सैंडर से बेहतर क्यों होगा? मैंने देखा कि आपकी अंतिम पंक्ति समान है, लेकिन यदि वह सब आवश्यक है, RewriteCondतो पहले और पहले को क्यों शामिल किया जाए RewriteRule?
स्टेफमिकेल

यदि इस कोड का उपयोग किया जाता है, तो क्या आप अपने ब्राउज़र में टाइप कर सकते हैं exmple.com/../aboveSubDir?

@GamErix यह /aboveSubDirब्राउज़र या सर्वर द्वारा हल किया जाएगा ।
गमबो जूल

79

यहाँ वह है जो मैं एक उपनिर्देशिका पर पुनर्निर्देशित करता था। इसने यह अदृश्य रूप से किया और अभी भी अनुरोधों के माध्यम से अनुमति देता है जो एक मौजूदा फ़ाइल या जो कुछ भी है, से मेल खाता है।

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteCond %{REQUEST_URI} !^/subdir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/$1
RewriteCond %{HTTP_HOST} ^(www.)?site.com$
RewriteRule ^(/)?$ subdir/index.php [L]

अपने मानों के साथ site.com और subdir बदलें।


उम्मीद के मुताबिक काम करता है! महान!
काचर

होम पेज 'स्टील्थ' था ... लेकिन एक बार जब मैं एक लिंक पर क्लिक करता हूँ तो पता बार में उप नाम दिखाता है ... क्या उप नाम को दिखाने से रोकने का कोई तरीका है?
dsdsdsdsd

4
केवल रूट करता है - उप निर्देशिका नहीं करता
php-b-grader

3
मेरे लिए यह "आंतरिक सर्वर त्रुटि": /
पिथिकोस

1
बहुत बहुत धन्यवाद, आप नहीं जानते कि मैं कितनी देर से इसे ठीक से देख रहा हूं।
बेस डिज़ायर

26

एक अदृश्य रीडायरेक्ट को रूट से सबफ़ोल्डर पर सेट करने के लिए, आप निम्नलिखित RewriteRule का उपयोग /root/.htaccess में कर सकते हैं:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]

उपरोक्त नियम आंतरिक रूप से ब्राउज़र को पुनर्निर्देशित करेगा:

सेवा

तथा

सेवा

जबकि ब्राउज़र रूट फ़ोल्डर पर रहेगा।


1
यह स्वीकृत उत्तर होना चाहिए ... (कुछ अन्य जवाबों में सुझाए गए) के साथ-साथ रिवर्टयूल एक अनंत रीडायरेक्ट का कारण बनता है, क्योंकि / सबफ़ोल्डर को / सबफ़ोल्डर / सबफ़ोल्डर, आदि पर पुनर्निर्देशित किया जाता है ... रेवेरिटकॉन्ड {REQUEST_URI}! ^ / सबफ़ोल्डर यह सुनिश्चित करता है कि यदि कोई URL पहले से पुनर्निर्देशित है, तो यह दोबारा नहीं किया जाता है
patrick

21

एक अन्य विकल्प यदि आप URL को फिर से लिखना चाहते हैं और मूल URL को छिपाना चाहते हैं:

RewriteEngine on
RewriteRule ^(.*)$ /store/$1 [L]

इसके साथ, यदि आप उदाहरण के लिए टाइप करते हैं http://www.example.com/product.php?id=4, तो यह पारदर्शी रूप से फ़ाइल को खोलेगा, http://www.example.com/store/product.php?id=4लेकिन उपयोगकर्ता को पूर्ण यूआरएल दिखाए बिना।


2
यदि आप चाहते हैं कि क्वेरी स्ट्रिंग को फिर से लिखे गए url पर QSA( जोड़ें स्ट्रिंग स्ट्रिंग) जोड़ें [L]( [L, QSA])।
devios1

@chaiguy टिप के लिए धन्यवाद, लेकिन मेरे सर्वर पर यह QSA के बिना काम करता था (लेकिन मैं मानता हूं कि शायद QSA को जोड़ना बेहतर है)। शायद यह मेरे अपाचे सर्वर के कुछ विशेष विन्यास के कारण है?
गैबोरस

1
मेरे लिए यह विधि, example.com example.com/store को पारदर्शी रूप से दिखाती है, लेकिन example.com/test को पूर्वनिर्धारित करती है example.com/store/test, जो url दिखा रही है
Geoffrey Hale

14

यह सबसे सरल उपाय लगता था:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

मैं कुछ अन्य समाधानों के साथ पुनर्निर्देशित लूप प्राप्त कर रहा था।


2
यह एक निर्देशिका नहीं छुपाता है
php-b-grader

8

मैं आपके प्रश्न को नहीं समझता ...

यदि आप एक सबफ़ोल्डर में हर अनुरोध को पुनर्निर्देशित करना चाहते हैं:

RewriteRule ^(.*)$ shop/$1 [L,QSA]

http://www.example.com/* -> wwwroot/store/*

यदि आप एक सबफ़ोल्डर पर पुनर्निर्देशित करना चाहते हैं जिसका डोमेन नाम है

RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$
RewriteRule ^(.*)$ %1/$1 [L,QSA]

http://www.example.com/* -> wwwroot/example.com/*

मुझे आपका कोड ([^\.]+\.[^\.]+)$डोमेन को सबफ़ोल्डर नाम के रूप में आरक्षित करना पसंद है ।
चेतबाहन

6

मैंने पाया है कि परिपत्र पुनर्निर्देशन से बचने के लिए, पुनर्निर्देशन के दायरे को रूट निर्देशिका तक सीमित करना महत्वपूर्ण है। मैंने इस्तेमाल किया होगा:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) http://www.example.com/store [R=301,L]

6

उपर्युक्त अधिकांश समाधान सही हैं लेकिन वे सभी पुनर्निर्देशन की पारदर्शिता को याद कर रहे हैं।

मेरे मामले में, www.example.com पर आने पर मैं उपनिर्देशिका / स्टोर पर पुनर्निर्देशित होना चाहता था, लेकिन URL को www.example.com/store पर अपडेट किए बिना । (सभी मैं चाहता हूँ कि पेज कोड फॉर्म उस निर्देशिका को प्राप्त करें)। यदि ऐसा है तो आपका मामला नीचे दिया गया समाधान पूरी तरह से काम करता है।

RewriteEngine on
RewriteCond %{HTTP_HOST} example\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /store/$1 [L]

स्रोत: http://wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory


अगर मुझे URL को अपडेट किए बिना www.example.com www.othersite.com/store पर पुनर्निर्देशित किया गया हो, तो मुझे क्या बदलना चाहिए? मैंने कोशिश की, लेकिन आपके कोड को अनुकूलित करने में असमर्थ था
चरण

मैं करने के लिए अंतिम पंक्ति को बदलने के लिए करने की कोशिश की RewriteRule ^(.*)$ http://otherpage.com/subfolder/$1 [L]लेकिन यह यूआरएल अद्यतन करता है
कदम

आप सभी की जरूरत शब्दों को बदलने के लिए है exampleऔर store
महमूद ज़ाल्ट

मैंने बहुत अच्छी तरह से समझाया नहीं। मैं खुद example.comऔर otherpage.comडोमेन। जब मैं यात्रा करता example.comहूं, तो मैं चाहता हूं कि otherpage.com/subfolderURL अपडेट किए बिना प्रदर्शित की जाने वाली सामग्री
कदम

वैसे मेरा जवाब ऊपर ऐसा नहीं है। एक नया प्रश्न पोस्ट करने का प्रयास करें।
महमूद ज़ाल्ट

5

कोई भी इस उद्देश्य के लिए रीडायरेक्ट का उपयोग कर सकता है

Redirect 301 / www.example.com/store

या मानचित्रण के लिए उपनाम

Alias / /store

संपादित करें: mod_alias केवल httpd.conf में लागू है।

refrences


4

पूर्व में मैं निम्नलिखित कोड का उपयोग करता हूं, जो कि मेरे प्रत्येक डोमेन / उप-डोमेन के रूट URL को उनके पत्राचार उपनिर्देशिका पर पुनर्निर्देशित करने के लिए सही ढंग से काम करता है, जिसे नीचे दिए गए स्वयं के रूप में उप / डोमेन नाम दिया गया है:

RewriteCond %{HTTP_HOST} ^sub1.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain1.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub1.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

RewriteCond %{HTTP_HOST} ^sub2.domain2.com
RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

हालाँकि जब मैं एक और उप या डोमेन जोड़ना चाहता हूँ तो इसे उपरोक्त कोड में जोड़ना होगा। इसे नीचे दिए गए वाइल्डकार्ड (*) की तरह काम करने के लिए इसे और अधिक सुविधाजनक बनाना चाहिए :

RewriteCond %{HTTP_HOST} ^sub
RewriteCond %{REQUEST_URI} !/subs/
RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]

इसलिए जब भी एक और उपडोमेन / डोमेन जोड़ा जाता है जब तक उपडोमेन नाम में उप का उपसर्ग होता है (जैसे: sub3.domain1.com, sub1.domain3.com आदि) कोड मान्य रहेगा।


3

मुझे लगता है कि आपके द्वारा पोस्ट किए गए कोड के साथ मुख्य समस्याएं हैं:

  • पहली पंक्ति एक होस्ट पर सख्ती से नमूना डॉट कॉम से मेल खाती है, इसलिए www.sample.com मेल नहीं खाती है।

  • दूसरी पंक्ति कम से कम एक वर्ण चाहती है, जिसके बाद www.sample.com आता है, जो मेल नहीं खाता (आप पहले w से क्यों बच गए?)

  • शामिल किए गए नियमों में से कोई भी आपके लक्ष्य में निर्दिष्ट url पर पुनर्निर्देशित नहीं होता है (इसके अलावा, नमूना को नमूने के रूप में गलत वर्तनी में रखा गया है, लेकिन यह अप्रासंगिक है)।

संदर्भ के लिए, यहां आपके पास वर्तमान में कोड है:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^sample.com$
RewriteRule (.*) http://www.sample.com/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$
RewriteRule ^/(.*)$ /samle/%1/$1 [L]

2

थोड़ा गुगली करना, मुझे ये परिणाम देता है:

RewriteEngine पर
RewriteBase /
RewriteRule ^ सूचकांक। (। *)? $ Http://domain.com/subfolder/ [आर = 301]

यह आपके सबफ़ोल्डर में index.something नाम की फ़ाइल तक पहुंचने के किसी भी प्रयास को रीडायरेक्ट करेगा, चाहे फ़ाइल मौजूद हो या न हो।

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

RewriteCond% {HTTP_HOST}! ^ Www.sample.com $ [NC]
RewriteRule ^ (। *) $% {HTTP_HOST} / samlse / $ 1 [R = 301, L]

मैंने .htaccess फ़ाइल में अधिक रीडायरेक्ट नहीं किया है, इसलिए मुझे यकीन नहीं है कि यह काम करेगा।


2

इसे प्राप्त करने के लिए संभावित समाधानों में से दो तरीके निम्न हैं: 1. .htaccessरूट फ़ोल्डर में एक फ़ाइल को निम्नानुसार बनाएँ (उदाहरण के लिए example.com और my_dir को अपने संबंधित मानों के साथ बदलें):

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteCond %{REQUEST_URI} !^/my_dir/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /my_dir/$1
RewriteCond %{HTTP_HOST} ^(www.)?example.com$
RewriteRule ^(/)?$ my_dir/index.php [L] 
</IfModule>
  1. रीडायरेक्ट का उपयोग केवल रूट URL को "" "दूसरे फ़ोल्डर या URL पर रीडायरेक्ट करने के लिए करें,"

    रीडायरेक्टमैच ^ / $ http://www.example.com/my_dir


1

htaccess में नीचे की पंक्तियों का उपयोग करने का प्रयास करें

नोट: आपको यह जांचने की आवश्यकता हो सकती है कि default.html का नाम क्या है

default.html रूट फ़ोल्डर में डिफ़ॉल्ट रूप से लोड होने वाली फ़ाइल है।

RewriteEngine

Redirect /default.html http://example.com/store/


0

आप इस कोड को अपनी .htaccess फ़ाइल में जोड़ें

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /folder/index.php [L]
</IfModule>

0

मैं मूल प्रश्न का उत्तर किसी अन्य संभावित सिंटैक्स को इंगित करके नहीं दूंगा (अन्य उत्तरों में से कई हैं) लेकिन कुछ ऐसा इंगित करने से जो मुझे एक बार निपटना पड़ा है, जो मुझे पता लगाने में थोड़ा समय लगा:

What am I doing wrong?

एक संभावना है कि% {HTTP_HOST} ठीक से, या बिल्कुल भी आबाद नहीं हो रहा है। हालाँकि, मैंने केवल यह देखा है कि एक साझा होस्ट पर केवल एक मशीन में कुछ कस्टम पैच अपाचे 2.2 के साथ होता है, फिर भी यह एक संभावना है।


0

यदि फ़ाइल रूट में मौजूद नहीं है, तो यह उप-संस्करण का प्रयास करेगा। इसकी आवश्यकता के रूप में मैंने एक बुनियादी .html वेबसाइट को स्थानांतरित किया, जो उम्मीद करता है कि इसे रूट स्तर पर चलाया जाएगा और इसे एक सबडिर में धकेल दिया जाएगा। केवल तभी काम करता है जब सभी फाइलें समतल हों (संभवत: सबडिर में कोई .htaccess trickery)। सीएसएस और जेएस फाइलों जैसी जुड़ी चीजों के लिए उपयोगी है।

# Internal Redirect to subdir if file is found there.
RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-s
RewriteCond %{DOCUMENT_ROOT}/subdir/%{REQUEST_URI} -s
RewriteRule ^(.*)$ /subdir/$1 [L]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.