ক্যোয়ারী স্ট্রিংয়ের মধ্য দিয়ে যাওয়ার সময় অ্যাপাচি মোড_উরাইটের আচরণ নিয়ে আমরা একটি অদ্ভুত সমস্যা (একটি বাগ, সম্ভবত?) সম্মুখীন হয়েছি।
পুনরুত্পাদন করতে, আমরা ডিফল্ট অ্যাপাচি কনফিগারেশন সহ একটি পরিষ্কার উবুন্টু (একরিক) ইনস্টল করেছি। আমরা মোড_উইরাইট সক্ষম করেছি এবং ডিফল্ট সাইট কনফিগারেশনে আমরা নিম্নলিখিতগুলি যুক্ত করেছি:
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
আপনি দেখতে পাচ্ছেন, ক্যোরির স্ট্রিংটি ডাবল-পলায়নযোগ্য, যা ভুল। কারও কি ধারণা আছে যে আমরা কীভাবে এটি ঠিক করতে পারি? আমরা চেষ্টা করেছি কয়েকটি জিনিস:
- [এনই] যুক্ত করা হচ্ছে। এটি আমাদেরকে সঠিক ক্যোয়ারী স্ট্রিং দেয় তবে পথটি অবিচ্ছিন্ন, যা নতুন সমস্যার দিকে পরিচালিত করে।
- [এনই, বি] যুক্ত করা হচ্ছে। এটি কাজ করে বলে মনে হচ্ছে তবে পথের অংশ এবং অংশগুলির
/
মধ্যবর্তী স্থানগুলি থেকে বাঁচতে পারে।a
b
ম্যানুয়ালি ক্যোরিয় স্ট্রিংটি আনসকেপিং করা হচ্ছে।
RewriteCond %{QUERY_STRING} .* RewriteMap unescape int:unescape RewriteRule ^(.*)$ $1?${unescape:%{QUERY_STRING}}
যাইহোক, এর অর্থ আমরা কোয়েরি-স্ট্রিংয়ের মধ্যে
&
একটি , বলা, একটি এবং একজন পালিয়ে যাওয়া&
মধ্যে পার্থক্য করতে পারি না ।
হালনাগাদ:
এই বাগ রিপোর্ট একই সমস্যা বর্ণনা করে। প্রথম মন্তব্যটি আপাতদৃষ্টিতে এই সমস্যাটিকে সংশোধন করার একটি প্রতিশ্রুতিতে লিঙ্ক করেছে, তবে পিটার নীচে যেমন বলেছেন, বাস্তবে এটি ঠিক হয়ে গেছে বলে মনে হয় না।