301 पुनर्निर्देशन यूआरएल। जीटी चर के आधार पर.htaccess में




mod-rewrite query-string (3)

मेरे पास कुछ गन्दा पुराने यूआरएल हैं जैसे ...

http://www.example.com/bunch.of/unneeded/crap?opendocument&part=1

http://www.example.com/bunch.of/unneeded/crap?opendocument&part=2

... कि मैं नए, क्लीनर फॉर्म पर पुनर्निर्देशित करना चाहता हूं ...

http://www.example.com/page.php/welcome

http://www.example.com/page.php/prices

मैं समझता हूं कि मैं एक पृष्ठ को दूसरी रीडायरेक्ट के साथ रीडायरेक्ट कर सकता हूं

पुनर्निर्देश 301 /bunch.of/unneeded/crap http://www.example.com/page.php

लेकिन स्रोत पृष्ठ में परिवर्तन नहीं होता है, केवल वर्क्स मिलता है मैं इन GET वेरिएबल के मूल्य पर रीडायरेक्ट का आधार कैसे समझ सकता हूँ। किसी को भी मदद कर सकता है pls !? मैं पुरानी regexes के साथ काफी काम कर रहा हूँ ताकि मेरे पास एक मॉडेड रीरलाईट का इस्तेमाल करने पर एक पॉप हो, लेकिन मुझे गेट वाइरस को लिखने के लिए वाक्यविन्यास पर स्पष्ट नहीं किया गया है और मैं प्रदर्शन को प्रभावित करने से बचने के लिए पसंद करता हूं क्लीनर पुनर्निर्देशन निर्देश क्या उधर रास्ता है? और अगर कोई मुझे सही mod- फिर से लिखना वाक्यविन्यास pls के रूप में नहीं कर सकते हैं?

चीयर्स,

रोजर।


संक्षेप में, आप RedirectMatch साथ RedirectMatch मैच का उपयोग कर सकते हैं जो क्वेरी स्ट्रिंग समेत संपूर्ण यूआरएल को मैच करेगा। यह आपको यूआरएल के कुछ हिस्सों को पुनर्व्यवस्थित करने देगा, लेकिन यदि आपको "ओपेनड्यूमेंट और पार्ट = 1" जैसे "वेलकम" (जहां नया यूआरएल मूल एक से पूरी तरह से अलग है) जैसे रूपांतरण करना है, तो आपको RewriteMap आवश्यकता हो सकती है - या शायद बेहतर , बस सभी यूआरएल को page.php पर page.php और PHP स्ट्रिंग में पार्स को पार्स करें।

संपादित करें : यदि यह कुछ ऐसे यूआरएल हैं जो आप रीडायरेक्ट करना चाहते हैं, तो आप संभवत: अलग-अलग नियमों को लिख सकते हैं

RedirectPermanent http://www.example.com/bunch.of/unneeded/crap?opendocument&part=1 http://www.example.com/page.php/welcome
RedirectPermanent http://www.example.com/bunch.of/unneeded/crap?opendocument&part=2 http://www.example.com/page.php/prices

@ जेक रॉस

RewriteCond %{QUERY_STRING} option=com_content&task=view&id=70&Itemid=82
RewriteRule ^index.php http://www.domain.com/business/banks/? [R=301,L]

क्या? उपयोगकर्ता को यूआरएल को मूल पृष्ठ के रूप में एक ही क्वेरी स्ट्रिंग होने से भेजा जाएगा।


चूंकि यूआरएल क्वेरी के मापदंडों का मनमाना क्रम हो सकता है, आपको प्रत्येक पैरामीटर के लिए या हर संभव permutiation के लिए एक या फिर एक RewriteCond डायरेक्टिव का उपयोग करना होगा।

प्रत्येक पैरामीटर के लिए एक RewriteCond निर्देश के साथ यहां एक उदाहरण है:

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=1(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/welcome? [L,R=301]

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=2(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/prices? [L,R=301]

लेकिन जैसा कि आप देख सकते हैं, यह एक गड़बड़ हो सकती है।

इसलिए एक बेहतर तरीका हो सकता है एक RewriteMap का उपयोग RewriteMap । सबसे आसान कुंजी और मूल्य जोड़े के साथ एक सादा पाठ फ़ाइल होगी:

1 welcome
2 prices

अपने मैप को परिभाषित करने के लिए, अपने सर्वर या म्यूजिक होस्ट कॉन्फ़िगरेशन में निम्न निर्देश लिखिए (प्रति डायरेक्ट्री संदर्भ में इस निर्देश की अनुमति नहीं है):

RewriteMap examplemap txt:/path/to/file/map.txt

तो आपको बस एक नियम की आवश्यकता होगी:

RewriteCond %{QUERY_STRING} ^([^&]&)*opendocument(&|$)
RewriteCond %{QUERY_STRING} ^([^&]&)*part=([0-9]+)(&|$)
RewriteRule ^bunch\.of/unneeded/crap$ /page.php/%{examplemap:%2}? [L,R=301]