Products
96SEO 2025-09-04 11:08 5
因为互联网平安意识的提升,越来越多的网站开始采用HTTPS协议来保障数据传输的平安性。DEDECMS作为国内广泛使用的内容管理系统,也逐步适应这一趋势。只是很多站长在使用DEDECMS发布文章时遇到了一个棘手的问题:远程HTTPS图片无法本地化保存。这不仅影响了网站内容的完整性,也可能带来SEO优化上的隐患。本文将该问题, 并提供切实可行的解决方案,助力站长轻松搞定HTTPS环境下的远程图片本地化难题。
在DEDECMS中,当你编辑文章并插入外部图片时系统有一个“远程图片本地化”的功能,即自动将外部图片下载到自己服务器上保存,以防止图片因源站关闭或变动而导致页面显示异常。
不过 当网站启用HTTPS后发现对于HTTP协议的远程图片可以正常本地化,但对于HTTPS协议的远程图片却无法被下载到本地。这就导致内容中含有大量外链HTTPS图片, 不仅影响加载速度,还可能引起混合内容平安警告,对搜索引擎友好度也有负面影响。
DEDECMS原生代码设计上主要针对http协议进行处理:
inc_archives_functions.php
文件中的核心函数使用正则表达式匹配标签中的src属性, 只匹配http链接,不包含https;检测链接格式时只判断是否以http://开头,而忽略了https://;
CURL或file_get_contents等PHP函数调用时未设置合理SSL选项,导致下载https资源失败;
Dede早期版本对新兴HTTPS协议兼容性不足。
问题主要出现在正则表达式匹配和链接合法性判断上, 一边缺少对SSL证书验证设置,使得系统无法正确抓取并保存HTTPS资源。
定位文件:
dede/inc/inc_archives_functions.php
找到函数:GetCurContent
原始代码示例:
preg_match_all\.)/isU", $body, $img_array);
$img_array = array_unique;
- 修改为以下代码:
// 匹配HTTP和HTTPS两种情况
preg_match_all\.)/isU", $body, $img_array_http);
preg_match_all\.)/isU", $body, $img_array_https);
$img_array_http = array_unique;
$img_array_https = array_unique;
// 合并两个数组
$img_array = array_merge_recursive;
$img_array = array_unique;
// 原始代码示例,一般位于同一函数内循环处理部分:
if ) {
continue;
}
// 修改为兼容 https 的形式:
if && !preg_match) {
continue;
}
curl_setopt;
curl_setopt;
curl_setopt;
curl_setopt;
DedeCMS社区和第三方开发者已推出多款支持Https抓取增强功能的插件,比方说“远程附件助手”插件,这些插件大多数已经针对最新环境做了兼容优化,可以省去手动改代码风险。
A客户网站采用DedeCMS5.7运行,并全面启用Https。在日常发布新闻资讯时遇到大量从第三方Https站点引用的新闻配图无法自动下载的问题。经过我们技术团队排查发现正是上述正则匹配不完善所致。
Demand feedback