2009-05-04 12 views
20

मैं एकाधिक सबस्ट्रिंग वाले यूआरएल को फिर से लिखना चाहता हूं। एक सबस्ट्रिंग को उपनिर्देशिका के रूप में अनुरोध किया जा रहा है, जबकि किसी अन्य को सामान्य क्वेरी स्ट्रिंग पैरामीटर के रूप में अनुरोध किया जाता है।मिलान प्रश्न mod_rewrite नियम regex में चिह्नित करें

उदाहरण के लिए, मैं करने के लिए

http://www.mysite.com/friends.php?user=mark&page=2 

मैं प्रश्न चिह्न चरित्र के अपवाद के साथ यह पूरा करने में सक्षम हूँ

http://www.mysite.com/mark/friends?page=2 

से URL पुनः लिखने के लिए करना चाहते हैं। यहां मेरा पुनर्लेख नियम है:

... 
RewriteEngine On 
RewriteBase/
RewriteRule ^([A-Za-z0-9-_]+)/friends[?]?([^/\.]+)?$ friends.php?user=$1&$2 [L] 

यदि मैं किसी अन्य चरित्र में प्रश्न चिह्न बदलता हूं तो यह बहुत अच्छा काम करता है। ऐसा लगता है कि समस्या यह है कि '?' एक नई क्वेरी स्ट्रिंग की शुरुआत के रूप में वर्ण गलत तरीके से व्याख्या किया जा रहा है।

मुझे किसी भी पैरामीटर को पास करने की आवश्यकता है जो उपयोगकर्ता/दोस्तों के बाद दिखाई देता है। मैं इसे कैसे पूर्ण करूं?

उत्तर

33

आपको क्वेरी स्ट्रिंग को फिर से लिखने की कोशिश करने के बजाय [QSA] ध्वज का उपयोग करना चाहिए। [QSA] फिर से लिखे गए URL पर क्वेरी स्ट्रिंग पर गुजरता है।

तो अपने शासन दिखना चाहिए:

... 
RewriteEngine On 
RewriteBase/
RewriteRule ^([A-Za-z0-9-_]+)/friends/? friends.php?user=$1 [QSA,L] 

आपका मामला बहुत the example given for using the QSA flag in the mod_rewrite cookbook के समान है।

+0

उत्तर के लिए धन्यवाद। वास्तव में अच्छी तरह से काम करता है और मैं अभी कुकबुक पढ़ रहा हूं। – markb

+0

सुपरर्स समाधान ने मेरे लिए भी काम किया, हालांकि मैंने अपनी शर्तों में कोड संपादित किया: रिवाइट्रूल^([ए-ज़ा-जे 0-9 -_] +) \। Php? pindex.php? typeofpage = $ 1 [क्यूएसए, एल] –

10

query is not part of the URL path and thus cannot be processed with the RewriteRule directive। यह केवल RewriteCond निर्देश के साथ किया जा सकता है (%{QUERY_STRING} देखें)।

लेकिन as Chad Birch already said यह QSA flag को स्वचालित रूप से नए यूआरएल में संलग्न मूल अनुरोधित क्वेरी प्राप्त करने के लिए सेट करता है। (

RewriteEngine On 
RewriteBase/
RewriteRule ^([A-Za-z0-9-_]+)/friends$ /friends.php?user=$1&%{QUERY_STRING} 

और सवाल

http://www.example.com/mark/friends?page=2 

फिर से लिखा जाएगा URL के रूप में:

+0

क्यूएसए में https://stackoverflow.com/questions/16468098/what-is-l-in-qsa-l-in-htaccess/16468677#comment79837245_16468677 पर सूचीबद्ध एक समस्या है । साथ ही, rewritecond query_string बिना किसी क्वेरी स्ट्रिंग के अनुरोधों को अलग करने में सक्षम नहीं है, बनाम नग्न क्वेरी स्ट्रिंग के साथ अनुरोध (यानी एक प्रश्न चिह्न और कुछ और नहीं)। क्या इन दो अनुरोधों को अलग करने का कोई तरीका है? – Pacerier

+0

ठीक एनबीएम .. मुझे यह मिला है: '$ {the_request}' – Pacerier

1

पुनर्लेखन झंडा QSA उपयोग करने के अलावा, आप भी QUERY_STRING वातावरण चर के रूप में नीचे दिखाया गया है का उपयोग कर सकते निर्दिष्ट):

http://www.example.com/friends.php?user=mark&page=2 
+0

कूल, '% {QUERY_STRING} 'काम करता है। – Pacerier

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