我的 URL 方案是 /foo/var1-var2-var3…/bar
我正在使用这些 mod_rewrite 规则:
RewriteBase /foo/
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [PT,L]
如果字符串“var1-var2...”的长度大于 257 个字符,则将返回错误 403 Forbidden 和 404。但是,如果“var1-var2...”字符串的长度为 257 个字符或更少,并且后面跟着一个斜杠,则剩余 URL 的长度可以是任意长度。如何克服这个限制?
答案1
您正遇到底层文件系统的限制。
看一眼文件系统限制。您将看到大多数的最大文件名长度为 255 字节。因此,当 apache 和/或您的重写规则检查文件是否存在时,操作系统会向 apache 返回错误。
对于 Apache,如果您将此类规则放入 .htaccess 文件中,则解决这个问题已经太迟了。Apache 将已经尝试统计长文件名,从而抛出文件系统错误“(36)文件名太长”,并返回 403 错误。
我看到两个选择:
- 将应用程序的 URL 格式更改为每个斜杠之间最多 255 个字符。
- 将重写规则移入 apache 虚拟主机配置并删除 REQUEST_FILENAME。