Moodle 3.9.19 HTTP-HTTPS重定向问题致文件下载失败,求解决方案
解决Moodle 3.9.19升级后HTTPS访问下的文件下载混合内容错误
问题根源
Moodle从3.7升到3.9后,对站点协议的校验逻辑更严格了。你这情况是外部用户走HTTPS访问(但服务器本身没装SSL,内部用HTTP),Moodle默认按内部HTTP生成文件链接,浏览器检测到页面是HTTPS但资源是HTTP,触发混合内容拦截,直接阻止下载。
具体修复步骤
1. 修改Moodle配置文件适配HTTPS
找到Moodle根目录的config.php,添加以下代码:
$CFG->wwwroot = 'https://你的实际域名'; // 替换为用户访问用的HTTPS域名 $CFG->sslproxy = true; // 告知Moodle站点运行在SSL代理之后 $CFG->reverseproxy = true; $CFG->sslwwwroot = 'https://你的实际域名';
提醒:如果服务器内部仍需HTTP访问,
$CFG->wwwroot可保留HTTP,但必须设置$CFG->sslwwwroot为HTTPS,同时开启sslproxy,让Moodle识别外部的HTTPS请求。
2. 配置IIS传递HTTPS请求标识
由于前端HTTPS请求到IIS后转为HTTP,需要让PHP知晓当前实际是HTTPS请求:
- 打开IIS管理器,找到你的Moodle站点,进入「URL重写」模块
- 新建空白规则:
- 匹配URL填写
(.*) - 添加条件:
{HTTP_X_FORWARDED_PROTO}等于https - 操作选择「重写」,重写URL填
{R:1},然后在「服务器变量」中添加HTTPS,值设为on
- 匹配URL填写
- 保存规则后重启IIS服务
3. 清理Moodle缓存
修改配置后必须清理缓存,否则可能不生效:
- 登录Moodle后台,进入「站点管理」→「开发」→「清除缓存」
- 也可直接删除Moodle目录下
cache文件夹内的所有文件(保留文件夹本身)
4. 检查文件存储的URL设置
如果使用了外部文件存储(如本地存储、第三方存储),需确保生成的文件链接为HTTPS:
- 进入「站点管理」→「插件」→「文件存储」→「存储库」
- 逐个检查存储库配置,将访问URL调整为HTTPS协议
验证修复效果
完成以上操作后,用外部HTTPS访问站点并尝试下载文件:
- 打开浏览器F12开发者工具,切换到「网络」标签
- 点击下载链接,查看请求URL是否为HTTPS
- 若不再出现「Mixed Content」错误,说明修复成功
内容的提问来源于stack exchange,提问作者Lyrics Studio
相关产品推荐
相关产品推荐

