Moodle 5.1.x升级时出现ERR_TOO_MANY_REDIRECTS

前端开发 2026-07-11

我正在把Moodle从 5.0.1升级到5.1.3+(当前最新版本)。此次升级包括 代码目录重构,现在我们必须(理想情况下)将DocumentRoot指向moodle Web包中的 public 子目录(这样某些moodle的 PHP文件可以放在网页视图之外)。

我在Apache下和终端里都在运行PHP 8.4.18。

我在WHM/cPanel组合环境下运行站点,研究后发现,我应该能够简单地用一个指向新moodle包中public文件夹的符号链接来替换cPanel主目录中的 public_html 目录(同样地,更新现有的www符号链接)。

当使用指向5.0.1版本(包的根目录)的符号链接时,站点运行正常;但切换到5.1.3+版本(指向包中public子文件夹的符号链接)时,它会尝试启动升级,随后出现ERR_TOO_MANY_REDIRECTS,因为站点在 ./admin/index.php./install.php 之间不断重定向。

我已经尝试清理Moodle的缓存:

rm -rf moodledata/cache/*
rm -rf moodledata/localcache/*
rm -rf moodledata/sessions/*

我也尝试注释掉 ./admin/index.php 中的一行重定向代码。

我创建了一个测试PHP文件来输出 $CFG->dirroot 的值,它会正确地指向 /home/<myusername>/moodle/moodle_5.1.3

这是我的主目录:

在此输入图片描述

下面是显示moodle文件夹包含旧版本和新版本moodle的文件夹结构的截图:

目录列表显示 moodle 文件夹包含 moodle_5.0.1 和 moodle_5.1.3,后者包含一个 public 子文件夹。

重定向如前所述发生在 ./index.php?lang-en./admin/install/php 之间:

Google 开发者工具中显示 install.php 与 admin/index.php 之间重定向的图片

还有什么其他建议我应该尝试吗?谢谢

解决方案

Moodle 5.1+版本期望 config.php 位于包的根目录中,而不是在public文件夹中。public文件夹里有一个Shim config.php(参见 https://github.com/moodle/moodle/blob/main/public/config.php),用于处理在该位置查找它的脚本。如果你已有一个部署流程会把 public 里的文件覆盖成一个“真实”的config.php,那么你将看到你描述的错误行为。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章