参数长度> 255的重写URL不起作用

我正在使用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个字符的string时,Apache返回一个“403 Forbidden”。

直接访问foo.php?id=1,2,3,4是没有问题的,即使是很长的idstring,但是这不是我的select。

有一些Apache或其他设置我应该调整?

更新 :我用RewriteLogLevel 9打开RewriteLog。用一个简短的idstring,我在我的日志文件中有几行。 但是当idstring大于255个字符时, 没有任何logging(好像mod_rewrite甚至没有执行?)。

如果您发现这个问题有趣/有帮助,请注意它。

    你认为你遇到了文件系统的限制吗?

    可能是最大文件名长度是255个字节,当apache或mod_rewrite规则检查文件是否存在时,操作系统会将错误返回给apache。

    如果你在你的.htaccess文件中添加一些规则,解决这个问题为时已晚。 Apache将已经试图统计文件名并抛出文件系统错误'(36)文件名太长',返回一个403错误。

    也许你可以改变你的应用程序内的url模式。 从斜杠到斜线的最大值为255个字符。

    编辑: 在这里寻找这个问题的详细答案。 我从那里借来的。

    这里有一个类似的关于这个限制的问题 :

    您可能会遇到底层文件系统的限制

    我不知道你是否在你的.htaccessconfiguration中使用REQUEST_FILENAME,所以不知道提供的解决scheme是否能够正常工作。

    绝对是一个有趣的问题。 你是否运行mod_security,如果是的话,尝试没有它? 也许它只是不喜欢长path名称或长path名称中包含未编码的逗号? ^^

    虽然它本能地感觉更像是一个urlpath的限制,或者至less是它的个别部分,或者是GmonC写的基础文件系统解释。 这也将解释为什么在查询string中的长部分的常规url工作正常。

    我认为旧的ASP.NET曾经有一个约260个字符的请求path限制,以及。

    你愿意改变http服务器吗? 然后考虑nginx而不是apache。

    并使用http://wiki.nginx.org/NginxHttpRewriteModule