मैंने विभिन्न उप निर्देशिकाओं में पृष्ठों को रूट निर्देशिका में स्थानांतरित कर दिया है और प्रत्येक पृष्ठ के लिए 301 पुनर्निर्देशित करना चाहता हूं और कोई भी क्वेरी स्ट्रिंग रख सकता हूं जो मौजूद हो सकती है। उदाहरण के लिए:

  • www.example.com/folder/page1.html पुनर्निर्देशित करेगा: www.example.com/page1.html

तथा

  • www.example.com/folder2/page2.html पुनर्निर्देशित करेगा: www.example.com/page2.html

यदि एक क्वेरी स्ट्रिंग मौजूद है, जिसका उपयोग हम कभी-कभी करते हैं, तो मैं चाहूंगा कि यह संरक्षित रहे। ऐसे कई पृष्ठ हैं जो कई सबफ़ोल्डरों में थे जिन्हें मुझे पुनर्निर्देशित करने की आवश्यकता है। सभी संभावित रूप से क्वेरी स्ट्रिंग हो सकते हैं।

मैंने लैंडिंग पृष्ठों के लिए सरल रीडायरेक्ट किए हैं जहाँ लैंडिंग पृष्ठ में एक निश्चित क्वेरी स्ट्रिंग है और क्वेरी स्ट्रिंग को हार्ड कोड कर सकता है क्योंकि यह हमेशा समान रहेगा। यहाँ ऐसा नहीं है।

मुझे निम्न उदाहरण मिला है जो करीब है, लेकिन यह जानने के लिए पर्याप्त नहीं है कि यह काम करेगा या नहीं, और एक सबफ़ोल्डर होना चाहिए, जिसकी सामग्री को स्थानांतरित नहीं किया जा रहा है, इसलिए ...

RewriteEngine On RewriteRule ^subfolder/(.*)$ /$1 [R=301,QSA,L] 

  • इसके अलावा, क्वेरी स्ट्रिंग के साथ एक अतिरिक्त उदाहरण के रूप में: www.example.com/folder1/page1.html?m=3 www.example.com/page1.html?m=3 पर रीडायरेक्ट होगा।
  • क्या आप पुनर्निर्देशित करना चाहते हैं सब कुछ एक सबफ़ोल्डर के भीतर या उस सबफ़ोल्डर के भीतर कुछ निश्चित फ़ाइलें? क्या आपके पास कोई मौजूदा निर्देश है? .htaccess फ़ाइल?
  • सबफ़ोल्डर के भीतर सब कुछ। मेरे पास केवल एक सबफ़ोल्डर है।। Html फाइलें जिन्हें मैं रीडायरेक्ट नहीं करना चाहता। अपने सबफ़ोल्डर्स में अन्य सभी पृष्ठों को पुनर्निर्देशित किया जाना चाहिए।
RewriteRule ^subfolder/(.*)$ /$1 [R=301,QSA,L] 

यह रीडायरेक्ट करने के लिए ठीक काम करेगा सब विशिष्ट सबफ़ोल्डर के भीतर फ़ाइलें। QSA ध्वज की आवश्यकता नहीं है क्योंकि क्वेरी स्ट्रिंग डिफ़ॉल्ट रूप से संरक्षित है। QSA ध्वज की आवश्यकता तभी होगी जब आप इसमें क्वेरी स्ट्रिंग शामिल करेंगे प्रतिस्थापन (यानी। दूसरा अर्ग टू RewriteRule निर्देश - लक्ष्य URL) और आप चाहते हैं कि मूल क्वेरी अनुरोध पर हो संलग्न (Query String Append)।

हालाँकि, यदि आप पुनर्निर्देशित करना चाहते हैं प्रत्येक उपनिर्देशिका एक को छोड़कर तब आप एक नियम बनाकर ऐसा कर सकते हैं अपवाद उपनिर्देशिका के लिए आप पुनर्निर्देशित नहीं करना चाहते हैं।

उदाहरण के लिए, mod_rewrite का उपयोग करके .htaccess:

RewriteCond %{REQUEST_URI} !^/subdir-not-redirected/ [NC] RewriteRule ^[^/]+/([^/]*)$ /$1 [R=302,L] 

अगर है ही .html फ़ाइलें जो आप पुनर्निर्देशित करना चाहते हैं तो regex के साथ अधिक विशिष्ट होना चाहिए ...

RewriteRule ^[^/]+/([^/]*\.html)$ /$1 [R=302,L] 

यह केवल एकल उपनिर्देशिका में फ़ाइलों से मेल खाता है। यह उन फ़ाइलों से मेल नहीं खाएगा जो एक से अधिक उपनिर्देशिका गहरी हैं।

यह एक 302 (अस्थायी) पुनर्निर्देशित है। केवल 301 के लिए (स्थायी) बदलें जब आपने पुष्टि की है कि यह ठीक काम कर रहा है - परीक्षण के दौरान संभावित कैशिंग मुद्दों से बचने के लिए।


एक विकल्प के रूप में, यदि आपके पास कोई मौजूदा mod_rewrite निर्देश नहीं है, तो आप इसे एकल mod_alias के साथ भी कर सकते हैं RedirectMatch इसके बजाय निर्देश:

RedirectMatch 302 ^/(?!subdir-not-redirected)[^/]+/([^/]*\.html)$ /$1 

यह एक का उपयोग करता है नकारात्मक दिखावट उपनिर्देशिका के लिए एक अपवाद बनाने के लिए जिसे आप पुनर्निर्देशित नहीं करना चाहते हैं। (आप ऊपर के साथ एक ही विधि का उपयोग कर सकते हैं RewriteRuleके बजाय एक अलग का उपयोग कर RewriteCond निर्देश।)

  • उत्तर देने के लिए आपको बहुत बहुत धन्यवाद। मैं इसे एक शॉट दूंगा और आपको बताऊंगा कि यह कैसे हुआ!
  • नमस्ते, उत्तर के लिए धन्यवाद। मेरे पास अन्य mod_rewrites हैं (साइट के संस्करण के https: संस्करण में सभी ट्रैफ़िक को निर्देशित करने के लिए। मैंने इस शर्त और नियम को इनहाट्सएप फ़ाइल के नीचे रखा है और मुझे पुराने url में से एक का परीक्षण करते समय 503 सेवा अस्थायी रूप से अनुपलब्ध त्रुटि मिल रही है। पथ।
  • चूंकि स्थानांतरित करने के लिए लगभग 20 urls की आवश्यकता थी, इसलिए मैंने प्रत्येक के लिए निम्नलिखित का उपयोग किया: अब के लिए: RewriteRule ^ / folder / page.html https: //example.com/page.html [301, L]

आप के लिए काम किया: Charles Robertson | हमसे संपर्क करना चाहते हैं?