Saya menggunakan mod_rewrite untuk menulis ulang URL seperti ini:
http://example.com/1,2,3,4/foo/
Dengan melakukan ini di .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Ini berfungsi dengan baik, kecuali ketika "1,2,3,4" berubah menjadi string yang lebih panjang dari 255 karakter, Apache mengembalikan "403 Forbidden".
Tidak ada masalah mengunjungi foo.php?id=1,2,3,4
langsung, bahkan dengan string id yang sangat panjang, namun ini bukan pilihan bagi saya.
Apakah ada beberapa Apache atau pengaturan lain yang harus saya atur?
UPDATE : Saya mengaktifkan RewriteLog dengan RewriteLogLevel 9. Dengan string id pendek, saya mendapatkan beberapa baris dalam file log saya. Tetapi ketika string id lebih besar dari 255 karakter., Tidak ada yang dicatat (sepertinya mod_rewrite bahkan tidak mengeksekusi?).
Jika Anda menemukan pertanyaan ini menarik / bermanfaat, harap perbarui.
RewriteLog
dan RewriteLogLevel
agar Anda dapat melihat apa yang dicocokkan dan bagaimana itu benar-benar ditulis ulang. Saya kira hanya 255 karakter yang sedang disalin ke dalam $1
, dan yang akhirnya menjadi id
bahwa klien tidak berwenang untuk melihat, jadi Apache mengembalikan 403. Saya belum melihat kode, tetapi bisa jadi itu memanipulasi Apache referensi balik dalam buffer 256-byte tetap (256-byte dicadangkan untuk NULL yang mengakhiri).