ฉันใช้ mod_rewrite เพื่อเขียน URL เช่นนี้:
http://example.com/1,2,3,4/foo/
โดยทำสิ่งนี้ใน. htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
มันทำงานได้ดียกเว้นเมื่อ "1,2,3,4" เปลี่ยนเป็นสตริงที่มีความยาวมากกว่า 255 ตัวอักษร Apache จะส่งคืน "403 Forbidden"
ไม่มีปัญหาในการเยี่ยมชมfoo.php?id=1,2,3,4
โดยตรงแม้จะมีสตริง id ยาวมาก แต่นี่ไม่ใช่ตัวเลือกสำหรับฉัน
มี Apache หรือการตั้งค่าอื่น ๆ ที่ฉันควรปรับแต่งหรือไม่?
อัปเดต : ฉันเปิด RewriteLog ด้วย RewriteLogLevel 9. ด้วยสตริง id สั้น ๆ ฉันได้หลายบรรทัดในไฟล์บันทึกของฉัน แต่เมื่อสตริง id มากกว่า 255 ตัวอักษรไม่มีสิ่งใดที่ถูกบันทึกไว้ (ดูเหมือนว่า mod_rewrite จะไม่ทำงานด้วยซ้ำ)
หากคุณพบว่าคำถามนี้น่าสนใจ / เป็นประโยชน์โปรดโหวตขึ้น
RewriteLog
และRewriteLogLevel
เพื่อให้คุณสามารถเห็นสิ่งที่ตรงกันและวิธีการเขียนใหม่ ฉันเดาว่ามีเพียง 255 ตัวอักษรเท่านั้นที่ถูกคัดลอก$1
และกลายเป็นid
ว่าลูกค้าไม่ได้รับอนุญาตให้ดูดังนั้น Apache จะคืนค่า 403 ฉันไม่ได้ดูรหัส แต่อาจเป็นไปได้ว่า Apache ปรุงแต่ง backreference ในบัฟเฟอร์ 256- ไบต์คงที่ (256 สำรองไว้สำหรับการยกเลิก NULL)