2010-02-12 9 views
41

मैं इस तरह की क्वेरी स्ट्रिंग पैरामीटर वाले URL है मान लीजिए:मैं mod_rewrite के साथ क्वेरी स्ट्रिंग चर से कैसे मिलान कर सकता हूं?

/index.php?book=DesignPatterns&page=139 
/index.php?book=Refactoring&page=285 

mod_rewrite का उपयोग करना, कैसे मैं उन्हें इस तरह के एसईएस URL पर ले जाते सकता है?

/DesignPatterns/139 
/Refactoring/285 

उत्तर

93
RewriteCond %{QUERY_STRING} book=(\w+)&page=(\d+) 
RewriteRule ^index.php /%1/%2? [L,R=301] 

RewriteRule केवल पथ पर (अप करने के लिए, लेकिन प्रश्न चिह्न शामिल नहीं) लग रहा है क्योंकि, RewriteCond का उपयोग क्वेरी स्ट्रिंग में मान कैप्चर करना।

ध्यान दें कि RewriteCond से मेल खाता है %1 में कब्जा कर रहे हैं, %2, आदि के बजाय $1, $2, आदि

इसके अलावा RewriteRule के अंत में ? ध्यान दें। यह mod_rewrite को नए URL पर मूल क्वेरी स्ट्रिंग को जोड़ने के लिए नहीं बताता है, इसलिए आप /DesignPatterns/151 /DesignPatterns/151?book=DesignPatterns&page=151 के पूर्णांक के साथ समाप्त होते हैं।

  1. L सुनिश्चित करता है कि कोई अन्य नियम है कि अन्यथा से मेल करने वाले कार्रवाई की जाएगी (दूसरे शब्दों में, यह सुनिश्चित करता है इस "पिछले" संसाधित नियम है):

    [L,R=301] झंडे दो बातें।

  2. R=301 सर्वर को रीडायरेक्ट प्रतिक्रिया वापस भेजने का कारण बनता है। पुनर्लेखन के बजाय, यह क्लाइंट को नए URL के साथ फिर से प्रयास करने के लिए कहता है। =301 इसे permanent redirect बनाता है, ताकि अन्य चीजों के साथ, खोज इंजन पुराने यूआरएल को उनके इंडेक्स में नए यूआरएल के साथ बदलने के बारे में जानेंगे।
+10

+1 मुझे यह पसंद है जब एक उत्तर के साथ एक पूर्ण स्पष्टीकरण दिया जाता है –

+1

जब आप एकाधिक रीराइट नियम होते हैं तो शायद आप [एल] ध्वज भी चाहते हैं। नियम के मिलान के बाद [एल] झंडा प्रसंस्करण बंद कर देता है, और [आर] झंडा इसमें शामिल नहीं है। – TheJosh

+1

$ बनाम% मुझे मार रहे थे। मुझे पता नहीं था। धन्यवाद! – keithwyland

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^