रूट यूआरएल को उपनिर्देशिका में रीडायरेक्ट करने के लिए.htaccess फिर से लिखें




mod-rewrite redirect (13)

htaccess में नीचे लाइनों का उपयोग करने की कोशिश करें

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

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

RewriteEngine

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

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

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]

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


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

RewriteEngine On
RewriteRule ^$ /store [L]


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

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

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

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

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

मेरे मामले में, www.example.com पर जाकर मैं उपनिर्देशिका / स्टोर पर रीडायरेक्ट करना चाहता था लेकिन यूआरएल को 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


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

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

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


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

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 आदि) कोड वैध रहेगा।


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

RedirectMatch ^/$ /store/

असल में, यह रूट और केवल रूट यूआरएल को रीडायरेक्ट करता है। उत्तर इस लिंक से निकला


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

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

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/*

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

What am I doing wrong?

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


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

# 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]

यह सबसे आसान समाधान लग रहा था:

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

मुझे कुछ अन्य समाधानों के साथ रीडायरेक्ट लूप मिल रहा था।


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

RewriteEngine on

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

ऊपर दिया गया नियम आंतरिक रूप से ब्राउजर को रीडायरेक्ट करेगा:

सेवा मेरे

तथा

सेवा मेरे

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