मैं एक वेबसाइट के यूआरएल में एक सबफ़ोल्डर छुपा रहा हूँ

था:

https://www.example.com/sub-folder/index.php

चाहते हैं:

https://www.example.com/index.php

"उप-फ़ोल्डर" में .htaccess में निम्नलिखित है, एक काम करता है और दूसरा नहीं करता है, और मुझे समझ में नहीं आता कि क्यों।

यह काम:

RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ [NC]
RewriteCond %{THE_REQUEST} /sub-folder/(\S*)\s [NC]
RewriteRule ^ /%1 [R=301,NC,NE,L]  

यह काम नहीं करता:

RewriteCond %{REQUEST_URI} ^/sub-folder/ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?example.com$ [NC]
RewriteRule ^sub-folder/(.*)$ /$1 [R=301,NC,NE,L]

बाद वाला सही प्रतीत होता है। मैं इसे स्वीकार करता हूं! मैंने इसे बाद वाले को दूसरे स्टैक ओवरफ्लो समाधान से कॉपी किया, जो काम करने के लिए दिखाई दिया। https://htaccess.madewithlove.be के अनुसार बाद वाला सही परिणाम देता है, लेकिन व्यवहार में ऐसा नहीं होता है काम।

मेरे पास पूर्व के साथ एक कामकाजी समाधान है, लेकिन समझ में नहीं आता कि बाद वाला क्यों विफल रहता है। क्या कोई मुझसे इसकी व्याख्या करेगा?

अग्रिम में धन्यवाद!

1
oaccamsrazor 30 जिंदा 2020, 01:17

1 उत्तर

सबसे बढ़िया उत्तर

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

क्योंकि वह परीक्षण उपकरण मानता है आपकी .htaccess फ़ाइल दस्तावेज़ रूट में है, /sub-folder में नहीं।

RewriteRule ^sub-folder/(.*)$ /$1 [R=301,NC,NE,L]

यह नियम कभी मेल नहीं खाएगा जब .htaccess फ़ाइल /sub-folder के अंदर ही स्थित हो, क्योंकि जिस URL-पथ से RewriteRule पैटर्न मेल खाता है, वह निर्देशिका कम है -उपसर्ग। निर्देशिका-उपसर्ग वह फ़ाइल सिस्टम पथ है जहाँ .htaccess फ़ाइल स्थित है (जिसमें अनुगामी स्लैश शामिल है)।

इसलिए, जब आप /sub-folder/foo/bar का अनुरोध करते हैं RewriteRule पैटर्न में /sub-folder/.htaccess का मिलान foo/bar से होता है (अनुरोधित URL-पथ, निर्देशिका-उपसर्ग को छोड़कर) .

जबकि, जब आप /sub-folder/foo/bar का अनुरोध करते हैं तो /.htaccess में RewriteRule पैटर्न का मिलान sub-folder/foo/bar से होता है (अनुरोधित URL-पथ, निर्देशिका-उपसर्ग को छोड़कर) .

1
MrWhite 30 जिंदा 2020, 05:13