我正在使用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或其他设置?
更新:我使用RewriteLogLevel 9打开了RewriteLog。使用短ID字符串,我的日志文件中出现了几行。但是,当id字符串大于255个字符时,不会记录任何内容(似乎mod_rewrite甚至没有执行?)。
如果您觉得这个问题有趣/有帮助,请对其进行投票。
RewriteLog
和启用mod_rewrite的日志记录,RewriteLogLevel
因此您可以看到匹配的内容以及它实际上是如何被重写的。我想可能只有255个字符被复制到$1
,最终导致id
客户端无权看到该字符,因此Apache返回了403。我没有看代码,但是可能是Apache操纵的固定256字节缓冲区中的反向引用(第256个保留给终止NULL)。