核心原理
织梦图片二级域名的原理是:
- 将网站的图片资源(
/uploads/目录下的所有文件)指向到一个新的二级域名,img.yourdomain.com。 - 在织梦的程序中,修改生成图片链接的规则,让所有图片的URL都从原来的
https://www.yourdomain.com/uploads/...变成https://img.yourdomain.com/uploads/...。 - 通过服务器配置,让
img.yourdomain.com域名能够正确访问到服务器上的/uploads/目录。
第一步:服务器配置(以Nginx为例)
这是最关键的一步,如果配置错误,图片将无法显示。
假设你的主域名是 www.yourdomain.com,你希望图片域名为 img.yourdomain.com。
-
添加DNS解析 登录你的域名解析服务商(如阿里云、腾讯云等),为
img.yourdomain.com添加一个A记录,指向你的服务器IP地址,确保解析生效(可能需要几分钟到几小时)。 -
Nginx 服务器配置 登录你的服务器,找到Nginx的配置文件,通常位于
/etc/nginx/nginx.conf或/etc/nginx/sites-available/目录下的站点配置文件(yourdomain.com)。你需要在你的主域名配置块(
server块)之外,为img.yourdomain.com新增一个server块。配置示例:
# ============================================== # 主域名配置 (www.yourdomain.com) # ============================================== server { listen 80; server_name www.yourdomain.com yourdomain.com; # 你的主域名 # ... 其他主域名的配置,如根目录、伪静态等 ... # root /path/to/your/website; # include /path/to/your/website/rewrite.conf; # 织梦的伪静态规则 # ... 其他配置 ... } # ============================================== # 图片二级域名配置 (img.yourdomain.com) # ============================================== server { listen 80; server_name img.yourdomain.com; # 图片域名 # 将网站根目录指向织梦的 uploads 文件夹 # !!! 请务必将 /path/to/your/website 替换为你网站的实际路径 !!! root /path/to/your/website/uploads; # 处理图片等静态文件,添加缓存头,提升性能 location ~* \.(jpg|jpeg|png|gif|ico|css|js|txt|flv|swf)$ { expires 30d; # 缓存30天 add_header Cache-Control public; # 如果你的图片在子目录下,可能需要调整 # try_files $uri $uri/ =404; } # 如果你的图片直接放在 uploads 下,不需要下面这段 # 如果图片在 uploads 的子目录(如images, allimg),需要用 rewrite # location / { # rewrite ^/uploads/(.*)$ /$1 break; # } } # 如果你的网站开启了 HTTPS,也需要为图片域名配置 HTTPS # server { # listen 443 ssl http2; # server_name img.yourdomain.com; # ssl_certificate /path/to/your/ssl/fullchain.pem; # ssl_certificate_key /path/to/your/ssl/privkey.pem; # root /path/to/your/website/uploads; # ... (与上面的 location 配置相同) ... # }配置要点解释:
server_name img.yourdomain.com;: 指定这个配置块只响应img.yourdomain.com的请求。root /path/to/your/website/uploads;: 这是核心! 它告诉Nginx,所有访问img.yourdomain.com的请求,都去服务器的/path/to/your/website/uploads目录下寻找文件。location ~* \.(jpg|...): 这是一个正则表达式匹配,专门处理图片等静态文件。expires 30d;设置浏览器缓存,能极大减轻服务器压力并加快用户二次访问速度。
-
重启Nginx服务 保存配置文件后,执行以下命令让配置生效:
sudo nginx -t # 检查配置语法是否正确 sudo systemctl restart nginx # 重启Nginx服务
直接在浏览器访问 http://img.yourdomain.com/2025/10/xx.jpg 应该就能看到你的图片了。
第二步:织梦DedeCMS程序配置
服务器配置好后,我们需要修改织梦,让它以后发布的文章、产品等内容,都使用新的图片域名。
-
修改
include/helpers/channelunit.helper.php文件 这是织梦生成文章内容、栏目链接等的核心文件,我们需要修改其中的图片路径处理函数。- 用FTP或SSH工具,打开你的织梦安装目录。
- 路径是:
/dede/include/helpers/channelunit.helper.php - 找到
function GetMkUrl($url, $type)函数,或者查找//远程和//本地的判断逻辑。 - 在函数中,找到返回
$murl的地方,修改它。
修改前(示例代码片段):
// ... 代码 ... if($murl=='') { if($type=='') { $murl = $GLOBALS['cfg_cmspath']."/".trim($url); } else { $murl = $GLOBALS['cfg_cmspath']."/".$type."/".$url; } } return $murl; // ... 代码 ...修改后(示例代码片段):
// ... 代码 ... if($murl=='') { // 定义你的图片域名 $img_domain = 'https://img.yourdomain.com'; // 请替换成你自己的图片域名 if($type=='') { // 如果是本地图片,则使用图片域名 if (strpos($url, 'uploads') !== false) { $murl = $img_domain . "/" . trim($url); } else { $murl = $GLOBALS['cfg_cmspath']."/".trim($url); } } else { // 如果是本地图片,则使用图片域名 if (strpos($url, 'uploads') !== false) { $murl = $img_domain . "/" . $type . "/" . $url; } else { $murl = $GLOBALS['cfg_cmspath']."/".$type."/".$url; } } } return $murl; // ... 代码 ...修改逻辑说明: 我们在返回URL前,先判断一下
$url是否包含uploads字符串,如果包含,说明是站内的图片资源,我们就用我们定义好的$img_domain来拼接路径,如果不包含,则使用原来的逻辑(通常是处理栏目、文章页等非图片资源)。 -
更新数据库中的旧数据(非常重要!) 你网站以前发布的文章、产品等内容,图片地址还是旧的
www.yourdomain.com,你需要批量更新这些数据。-
使用织梦SQL命令工具(推荐)
- 登录织梦后台,点击【系统】-> SQL命令行工具。
- 在文本框中输入以下SQL语句(请务必将
www.yourdomain.com替换成你自己的主域名):UPDATE dede_archives SET body = REPLACE(body, 'https://www.yourdomain.com/uploads/', 'https://img.yourdomain.com/uploads/');
- 点击【查询执行】。
- 为了安全起见,你可能需要对其他几个主要表也执行类似的操作,
UPDATE dede_addonarticle SET body = REPLACE(body, 'https://www.yourdomain.com/uploads/', 'https://img.yourdomain.com/uploads/'); UPDATE dede_soft SET body = REPLACE(body, 'https://www.yourdomain.com/uploads/', 'https://img.yourdomain.com/uploads/'); UPDATE dede_product SET body = REPLACE(body, 'https://www.yourdomain.com/uploads/', 'https://img.yourdomain.com/uploads/'); -- ... 其他包含内容的表 ...
注意:
dede_archives是文章主表,body字段存储的是文章内容,如果你的自定义模型使用了不同的表,请相应调整。
-
使用PHP脚本批量替换 如果你有很多数据,SQL工具可能会因为超时而失败,可以写一个简单的PHP脚本放在网站根目录下执行。
<?php require_once 'dede/config.php'; // 引入织梦配置 $db = new DEDEMySQLi(); $old_domain = 'https://www.yourdomain.com/uploads/'; // 旧域名 $new_domain = 'https://img.yourdomain.com/uploads/'; // 新域名 // 需要更新的表和字段 $tables = [ 'dede_archives' => 'body', 'dede_addonarticle' => 'body', 'dede_addonflash' => 'body', 'dede_addonimages' => 'body', 'dede_addoninfos' => 'body', 'dede_soft' => 'body', 'dede_product' => 'body', ]; foreach ($tables as $table => $field) { $query = "UPDATE {$table} SET {$field} = REPLACE({$field}, '{$old_domain}', '{$new_domain}')"; $db->Execute($query); echo "更新表 {$table} 完成。<br>"; } echo "所有更新完成!"; ?>将此文件保存为
update_img_domain.php,然后在浏览器中访问http://www.yourdomain.com/update_img_domain.php执行,执行完毕后务必删除此文件。
-
第三步:验证与最终检查
- 清空缓存
- 在织梦后台,点击【系统】-> 一键更新网站 -> 更新HTML -> 更新文档HTML。
- 清空浏览器缓存,或者使用
Ctrl + F5强制刷新页面。
- 检查网站
- 打开几篇旧文章和几篇新发布的文章。
- 使用浏览器的“开发者工具”(F12),切换到“网络”(Network)标签。
- 查看图片请求的URL,确认它们已经变成了
https://img.yourdomain.com/...的形式。 - 确保图片能够正常加载,没有出现404错误。
- 检查SEO
使用站长工具(如百度、Google)的“抓取诊断”功能,检查网站,看图片URL是否正确。
常见问题与注意事项
-
Q: 图片不显示,404错误?
- 检查1: DNS解析是否生效?
- 检查2: Nginx的
root路径是否正确?路径是否指向了/uploads目录? - 检查3: Nginx配置是否保存并重启?
- 检查4: 织梦程序配置修改后,是否更新了数据库?
-
Q: 修改了
channelunit.helper.php后,新发布的文章图片还是旧域名?确保你修改的文件路径正确,并且已经保存,清空浏览器缓存,或者使用无痕模式访问。
-
Q: 网站开启了HTTPS,图片域名是HTTP,导致页面不安全(混合内容)?
- 解决方案: 在第一步的Nginx配置中,为
img.yourdomain.com配置好HTTPS(参考配置文件中的注释部分),然后在织梦的程序配置中,将$img_domain的值改为https://img.yourdomain.com。
- 解决方案: 在第一步的Nginx配置中,为
-
Q: 这个方法会影响附件下载吗?
- 会,因为织梦默认把附件也放在
uploads目录下,如果你不想让附件也走图片域名,你需要修改Nginx配置,让特定类型的文件(如.zip,.rar)不走img域名,或者修改织梦代码,更精细地判断文件类型。
- 会,因为织梦默认把附件也放在
-
性能提升原理:
- 减少Cookie传输: 浏览器对同一域名的并发连接数有限制,当图片使用独立域名时,浏览器可以同时从
www和img两个域名下载资源,突破了并发限制,加快了页面加载速度。 - 利用CDN: 你只需要在图片域名上启用CDN,就能轻松实现图片的全球加速和缓存,这是将图片放在主域名下无法比拟的优势。
- 服务器负载均衡: 图片流量和网站程序流量分离,可以更均衡地分配服务器资源。
- 减少Cookie传输: 浏览器对同一域名的并发连接数有限制,当图片使用独立域名时,浏览器可以同时从
按照以上步骤,你应该就能成功为你的织梦5.7网站配置好图片二级域名了,祝你操作顺利!
