1
Apache mod_rewrite ดับเบิลเข้ารหัสสตริงแบบสอบถามเมื่อเปลี่ยนเส้นทาง
เราพบปัญหาแปลก ๆ (ข้อผิดพลาดหรืออาจ?) กับพฤติกรรมของ Apache mod_rewrite เมื่อผ่านสตริงการสืบค้น ในการทำซ้ำเราได้ติดตั้ง Ubuntu แบบติดตั้ง (oneiric) ที่สะอาดพร้อมการกำหนดค่าเริ่มต้นของ Apache เราได้เปิดใช้งาน mod_rewrite และในการกำหนดค่าไซต์เริ่มต้นเราได้เพิ่มสิ่งต่อไปนี้: RewriteEngine on RewriteRule ^/(.*)$ /r/$1 [R] ในการทดสอบเราใช้ curl: 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 อย่างที่คุณเห็นสตริงเคียวรีจะถูก Escape สองครั้งซึ่งผิด ไม่มีใครมีความคิดว่าเราจะแก้ไขได้อย่างไร สองสิ่งที่เราได้ลอง: กำลังเพิ่ม [NE] สิ่งนี้ทำให้เรามีสตริงการสืบค้นที่ถูกต้อง แต่ไม่มีการใช้พา ธ ซึ่งทำให้เกิดปัญหาใหม่ กำลังเพิ่ม [NE, B] …