Discuz! X 远程图片不支持 https:改一行正则

编辑器下载远程图片只认 http 时,修改 forum_ajax.php 中校验正则,让 https 链接也能通过。

Discuz! X 编辑器里有个很实用的功能:下载远程图片——发帖时把外链图拉到本地,避免原站失效。用了一段时间发现:

  • http:// 开头的图片链接,下载正常;
  • https:// 开头的图片链接,经常下不下来。

全站都在往 HTTPS 迁的年代,这个限制等于废掉一半图片源。

原因

远程图片地址校验用了一段过严的正则,只认 http://,没把 https 算进去。所以 https 图在「是否允许下载」这一关就被挡掉了。

修改方法

打开文件:

/source/module/forum/forum_ajax.php

找到约第 399 行(不同小版本行号可能略有偏移,以内容为准):

if(preg_match('/^(http:\/\/|.)/i', $imageurl)) {

改成:

if(preg_match('/^(http(s)?:\/\/|.)/i', $imageurl)) {

关键是加上 (s)?,让 http 与 https 都通过。保存后清 Discuz 缓存,再试编辑器里的「下载远程图片」。

注意

  • 改核心文件,升级论坛时可能被覆盖,升级后要复查或做成自己的补丁记录;
  • 远程下载等于服务器去拉外网资源,注意超时、体积与安全(只给可信编辑组开放更稳妥);
  • 若站点本身强制 HTTPS,图片外链也应尽量统一协议,减少混合内容问题。

为何记下

早年一人维护社区/客户 Discuz 站,HTTPS 普及后这类「只认 http」的老代码会突然变成线上缺陷。一行正则的事,搜论坛能搜半天。把路径和替换原文留下,下次复制粘贴即可。

No comments yet