请求解决.htaccess中的LimitInternalRecursion错误问题
请求解决.htaccess中的LimitInternalRecursion错误问题
看起来你的.htaccess规则触发了递归循环,导致出现LimitInternalRecursion错误,我来帮你排查并修复这个问题。
问题根源
你当前的规则里,虽然把所有非/public/开头的请求都转发到了/public/$1,但后续的前端控制器规则是针对根目录的index.php——这就会引发循环:当请求/public/xxx这类非文件/非目录的路径时,会被重写到根目录的index.php,而根目录的index.php又会触发前面的规则再次转到/public/index.php,反复循环后就触发了服务器的递归限制。
修复后的.htaccess代码
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On RewriteBase / # 处理Authorization头信息,确保权限验证能正常传递 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 移除请求路径的尾部斜杠(仅针对非目录的请求) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 将所有非public开头的请求转发到public目录 RewriteCond %{REQUEST_URI} !^/public/ RewriteRule ^(.*)$ /public/$1 [L,QSA] # 处理public目录下的前端控制器,仅匹配public内的非文件/非目录请求 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^public/(.*)$ /public/index.php [L] </IfModule>
关键修改说明
- 调整了前端控制器的规则,明确只匹配
public/开头的非文件/非目录请求,直接转发到/public/index.php,彻底切断了循环的可能性。 - 保持了原有的Authorization头处理和尾部斜杠移除逻辑,确保原有功能不受影响。
额外建议
- 测试阶段可以把
R=301改成R=302(临时重定向),确认规则正常后再改回永久重定向,避免浏览器缓存旧的重定向规则影响测试结果。 - 确保你的应用的入口文件
index.php确实放在public目录下,路径匹配要准确。
备注:内容来源于stack exchange,提问作者Hicham
相关产品推荐
相关产品推荐

