Moodle 5.1.x升级时出现ERR_TOO_MANY_REDIRECTS
我正在把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的文件夹结构的截图:

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

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