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

phi*_*reo 13 mod-rewrite url querystring apache-2.2

我正在使用 mod_rewrite 来重写这样的 URL:

http://example.com/1,2,3,4/foo/
Run Code Online (Sandbox Code Playgroud)

通过在 .htaccess 中执行此操作:

RewriteEngine On
RewriteRule ^([\d,]+)/foo/$ /foo.php?id=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

它工作正常,除了当“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 甚至没有执行?)。

如果您觉得这个问题有趣/有帮助,请点赞。

mic*_*ino 9

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

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

如果你在你的 .htaccess 文件中加入了一些规则,那么解决这个问题就太晚了。Apache 将已经尝试统计文件名并抛出文件系统错误“(36) 文件名太长”,返回 403 错误。

也许您可以更改应用程序内的 URL 模式。从斜杠到斜杠最多 255 个字符。

编辑:在此处查看此问题的详细答案。我从那里借的。

  • Microspino,看起来您从@Jeff Clark 的回答中剪切并粘贴了部分答案:http://serverfault.com/questions/120397/max-length-of-url-257-characters-for-mod-rewrite。你应该超链接到那个答案,这样他就会声名狼藉。 (3认同)