You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求解决.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:33:11