Tôi đang sử dụng mod_rewrite để viết lại các URL như thế này:
http://example.com/1,2,3,4/foo/
Bằng cách làm điều này trong .htaccess:
RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Nó hoạt động tốt, ngoại trừ khi "1,2,3,4" biến thành một chuỗi dài hơn 255 ký tự, Apache trả về "403 Bị cấm".
Không có vấn đề truy cập foo.php?id=1,2,3,4
trực tiếp, ngay cả với một chuỗi id rất dài, tuy nhiên đây không phải là một lựa chọn cho tôi.
Có một số cài đặt Apache hoặc khác tôi nên điều chỉnh?
CẬP NHẬT : Tôi đã bật RewriteLog bằng RewriteLogLevel 9. Với một chuỗi id ngắn, tôi nhận được một vài dòng trong tệp nhật ký của mình. Nhưng khi chuỗi id lớn hơn 255 ký tự., Không có gì được ghi lại (có vẻ như mod_rewrite thậm chí không thực thi?).
Nếu bạn thấy câu hỏi này thú vị / hữu ích, vui lòng upvote nó.
RewriteLog
và RewriteLogLevel
vì vậy bạn có thể thấy những gì đang được khớp và cách thực sự được viết lại. Tôi đoán rằng chỉ có 255 ký tự được sao chép vào $1
và cuối cùng là một id
ứng dụng khách không được phép xem, vì vậy Apache trả về 403. Tôi đã không xem mã, nhưng có thể là do Apache thao túng độ phản hồi trong bộ đệm 256 byte cố định (thứ 256 được dành riêng cho NULL kết thúc).