我有一个Moodle应用程序版本4.0.2在Apache Web服务器上,使用PHP v8.0。在以管理员身份登录或提交更改到管理面板后,应用程序将重定向到一个非常奇怪的URI,如“example.com/admin/”。
我搜索了很多,以修复这种行为,有人说这是一个权限问题,所以我改变了整个数据目录和应用程序目录到“0777”报告到官方文档。其他人说这是一个Apache配置错误。就是这样:
<VirtualHost 0.0.0.0:80>
ServerName example.com
Redirect / https://example.com
</VirtualHost>
<VirtualHost 0.0.0.0:443>
ServerName example.com
DocumentRoot /var/www/example.com/httpdocs
ErrorLog ${APACHE_LOG_DIR}/error.log
AcceptPathInfo On
SSLEngine on
SSLCertificateFile /etc/apache2/certificates/certificate
SSLCertificateKeyFile /etc/apache2/certificates/certificate
<Directory /var/www/example.com/httpdocs/>
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
深入了解应用程序的功能,在登录/提交后返回303,将您带到页面[https://example.com/admin/](https://example.com/admin/%5C)。
这些东西快把我逼疯了,因为我没有任何错误或信息日志,也没有来自Apache本身的有用输出。
1条答案
按热度按时间rjee0c151#
经过长时间的调试,我弄清楚了是谁把元素放到URL中的。Moodle有一个核心库,weblib.php,它有一个函数
redirect
。这个函数在你想要导航的URL上执行一组字符串操作,比如替换和清理。现在,如果你看一下这一行,这个库在clean_text('<a href="'.$encodedurl.'" />', FORMAT_HTML)
模式上执行替换,从/^.*href="([^"]*)".*$/
到\\1
-根据preg_replace function documentation-。打印出这一行的输出,它返回<a></a>
,这是每个包上的每个index.php脚本上的函数redirect()
的参数。评论这一行,将使一切工作得像一个魅力,而且,提高了很多性能。我不太乐意对Moodle的库进行更新。你知道,它们应该准备好“按原样”使用。