अपाचे mod_rewrite डबल एन्कोड क्वेरी स्ट्रिंग को पुनर्निर्देशित करता है


13

हमें एक अजीब समस्या का सामना करना पड़ा है (एक बग, शायद?) अपाचे 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}}
    

    हालांकि, इसका मतलब है कि हम क्वेरी-स्ट्रिंग में &एक , और एक के बीच अंतर नहीं कर सकते &

अपडेट करें:

यह बग रिपोर्ट उसी समस्या का वर्णन करती है। पहली टिप्पणी एक मुद्दे को स्पष्ट रूप से ठीक करने के लिए लिंक करती है, लेकिन जैसा कि पीटर नीचे कहते हैं, ऐसा नहीं लगता है कि यह वास्तव में तय हो गया है।

जवाबों:


7

यह अपाचे में एक बग लगता है। यह बग रिपोर्ट थोड़ी गड़बड़ है, लेकिन आपकी समस्या का सटीक वर्णन करती है:

https://issues.apache.org/bugzilla/show_bug.cgi?id=34602

ऐसा लगता है कि वे इस मुद्दे से अवगत हैं। हालांकि बग का दावा है कि उन्होंने तय किया है, मैंने इसे Apache 2.3.15 के साथ परीक्षण किया है, और समस्या अभी भी बनी हुई है। यह भी ध्यान दें कि Apache 2.3 एक बीटा संस्करण है, इसलिए यदि यह ठीक नहीं हुआ, तो Apache 2.4 के बाहर होने तक भी इसका कोई फायदा नहीं है।


लगता है कि अपाचे 2.4.10 अभी भी ऐसा कर रहा है, हालांकि इसे 2.4.1 में तय किया जाना चाहिए था ।
अर्जन

1
मैं अभी भी २.४.
फ्रांस्वा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.