हमें एक अजीब समस्या का सामना करना पड़ा है (एक बग, शायद?) अपाचे mod_rewrite के व्यवहार के साथ जब क्वेरी तार के माध्यम से गुजर रहा है।
पुन: पेश करने के लिए, हमने डिफ़ॉल्ट अपाचे कॉन्फ़िगरेशन के साथ एक स्वच्छ उबंटू (वनरिक) स्थापित किया है। हमने mod_rewrite सक्षम किया है, और डिफ़ॉल्ट साइट कॉन्फ़िगरेशन में, हमने निम्नलिखित जोड़े हैं:
RewriteEngine on
RewriteRule ^/(.*)$ /r/$1 [R]
परीक्षण करने के लिए, हम कर्ल का उपयोग करते हैं:
curl -I 'http://[ubuntu-machine]/a/b%20c?a%20b'
प्रासंगिक उत्पादन है:
HTTP/1.1 302 Found
Server: Apache/2.2.20 (Ubuntu)
Location: http://[ubuntu-machine]/r/a/b%20c?a%2520b
जैसा कि आप देख सकते हैं, क्वेरी स्ट्रिंग डबल-एस्केप है, जो गलत है। क्या किसी के पास कोई विचार है कि हम इसे कैसे ठीक कर सकते हैं? कुछ चीजें जो हमने कोशिश की हैं:
- जोड़ना [NE]। यह हमें सही क्वेरी स्ट्रिंग प्रदान करता है, लेकिन पथ अप्रकाशित है, जो नई समस्याओं की ओर जाता है।
- जोड़ना [एनई, बी]। यह काम करने लगता है, लेकिन रास्ते के कुछ हिस्सों के
/
बीचa
औरb
भाग जाने का कारण बनता है । मैन्युअल रूप से क्वेरी स्ट्रिंग को अनसुना करना।
RewriteCond %{QUERY_STRING} .* RewriteMap unescape int:unescape RewriteRule ^(.*)$ $1?${unescape:%{QUERY_STRING}}
हालांकि, इसका मतलब है कि हम क्वेरी-स्ट्रिंग में
&
एक , और एक के बीच अंतर नहीं कर सकते&
।
अपडेट करें:
यह बग रिपोर्ट उसी समस्या का वर्णन करती है। पहली टिप्पणी एक मुद्दे को स्पष्ट रूप से ठीक करने के लिए लिंक करती है, लेकिन जैसा कि पीटर नीचे कहते हैं, ऐसा नहीं लगता है कि यह वास्तव में तय हो गया है।