mod_rewrite的最大URL长度为257个字符?

我的urlscheme是/foo/var1-var2-var3…/bar

我正在使用这些mod_rewrite规则:

RewriteBase /foo/ RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [PT,L] 

如果string“var1-var2 …”的长度大于257个字符,则返回错误403 Forbidden和404。 但是,如果“var1-var2 …”string的长度为257个字符或更less,并且后面跟着一个斜杠,则剩余url的长度可以是任意长度。 如何克服这个限制?

您正在遇到底层文件系统的限制。

看看文件系统限制 。 你会看到大多数文件的最大长度是255字节。 因此,当apache和/或您的重写规则检查文件是否存在时,操作系统会将错误返回给apache。

对于Apache,如果你把这样的规则放在.htaccess文件中,解决这个问题为时已晚。 Apache将已经尝试统计长文件名,从而引发文件系统错误'(36)文件名太长',返回403错误。

我看到两个选项:

  1. 将每个斜杠之间的应用程序的URL格式更改为最多255个字符。
  2. 将重写规则移入apache虚拟主机configuration并删除REQUEST_FILENAME。