核心原理
这个方案的核心是 “动静分离” 和 “域名分离”。

(图片来源网络,侵删)
- 动静分离:将网站的动态内容(PHP页面、数据库)和静态内容(图片、CSS、JS、HTML文件)分开存放,织梦默认是将静态内容也存放在主站目录下的。
- 域名分离:为静态资源创建一个独立的二级域名(
static.yourdomain.com),并通过DNS解析到与主站相同的服务器。 - URL重写:修改织梦的配置,使其在生成页面时,所有静态资源的路径都指向新的二级域名。
操作步骤(四步走)
第一步:准备工作(服务器和域名配置)
-
创建二级域名:
- 登录你的域名解析服务商(如阿里云、腾讯云、Cloudflare等)。
- 为你的主域名(
yourdomain.com)添加一个CNAME或A记录,指向你的二级域名。- 创建一个名为
static的主机记录,记录类型为CNAME,记录值为yourdomain.com。 - 这意味着访问
static.yourdomain.com时,会指向与yourdomain.com相同的服务器IP。
- 创建一个名为
-
服务器配置(Nginx示例):
- 登录你的服务器,编辑 Nginx 配置文件(通常在
/etc/nginx/nginx.conf或/etc/nginx/sites-available/yourdomain.com)。 - 为你的二级域名创建一个
server块,并将其指向一个专门存放静态文件的目录。
# 主站配置 server { listen 80; server_name yourdomain.com www.yourdomain.com; root /path/to/your/website; # 织梦主站根目录 # ... 其他主站配置 ... } # 二级域名 static 配置 server { listen 80; server_name static.yourdomain.com; # 指向存放静态文件的目录 # 我们建议在网站根目录下创建一个 'static' 文件夹 root /path/to/your/website/static; # 禁用日志记录(可选,减少IO) # access_log off; # error_log off; # 设置缓存,大幅提升性能 location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ { expires 1y; # 缓存1年 add_header Cache-Control "public, no-transform"; } # 如果目录下没有index文件,返回404 location / { try_files $uri =404; } } - 登录你的服务器,编辑 Nginx 配置文件(通常在
-
创建静态文件目录:
- 在你的织梦网站根目录下创建一个名为
static的文件夹。 - 将当前网站根目录下的所有静态资源(
/uploads、/templets、/special、/plus等目录下的图片、CSS、JS)复制或移动到/path/to/your/website/static目录下,并保持原有的目录结构。 - 重启 Nginx 使配置生效:
sudo systemctl restart nginx。
- 在你的织梦网站根目录下创建一个名为
第二步:修改织梦核心文件
这是最关键的一步,目的是让织梦在生成页面时,自动使用新的二级域名。

(图片来源网络,侵删)
-
定位文件:
- 打开织梦的
include目录。 - 找到并编辑
dedesql.class.php文件,这个文件是织梦数据库操作的核心,很多路径生成逻辑都在这里。
- 打开织梦的
-
修改代码:
-
在
dedesql.class.php文件中,搜索$GLOBALS['cfg_cmspath']和$GLOBALS['cfg_cmsurl']这两个变量,织梦在生成绝对路径时会用到它们。 -
我们需要修改这些变量的值,将它们指向新的二级域名。
-
找到类似下面的代码块(可能在文件的多个地方,需要仔细查找):
// ... 其他代码 ... if($GLOBALS['cfg_multi_site'] == 'Y') { $this->fields['templeturl'] = $GLOBALS['cfg_cmsurl'].'/templets/'.$this->fields['templet']; $this->fields['imgurl'] = $GLOBALS['cfg_cmsurl'].$this->fields['imgurl']; } else { $this->fields['templeturl'] = $GLOBALS['cfg_cmspath'].'/templets/'.$this->fields['templet']; $this->fields['imgurl'] = $GLOBALS['cfg_cmspath'].$this->fields['imgurl']; } // ... 其他代码 ...- 修改为:将
$GLOBALS['cfg_cmsurl']和$GLOBALS['cfg_cmspath']替换为你的二级域名。
// 定义你的二级域名 $static_domain = 'http://static.yourdomain.com'; // ... 其他代码 ... if($GLOBALS['cfg_multi_site'] == 'Y') { // 修改这里 $this->fields['templeturl'] = $static_domain.'/templets/'.$this->fields['templet']; $this->fields['imgurl'] = $static_domain.$this->fields['imgurl']; } else { // 修改这里 $this->fields['templeturl'] = $static_domain.'/templets/'.$this->fields['templet']; $this->fields['imgurl'] = $static_domain.$this->fields['imgurl']; } // ... 其他代码 ...- 重要提示:
dedesql.class.php文件很大,路径生成逻辑分散,你需要全局搜索cfg_cmspath和cfg_cmsurl,并逐一判断上下文,将所有用于生成静态资源路径的地方都替换成你的$static_domain,这可能需要一些耐心。
-
第三步:修改织梦后台配置
-
开启全站静态化:
- 登录织梦后台,进入“系统” -> “系统基本参数” -> “核心设置”。
- 找到 “是否开启织梦全站静态化” 选项,选择 “是”。
- 找到 “主页链接方式” 选项,选择 “独立页面” 或 “动态页面” 都可以,但推荐使用独立页面(即
.html后缀)。
-
设置附件目录:
- 在“核心设置”中,找到 “附件目录” 选项,将其修改为你之前创建的
static/uploads目录(相对于网站根目录)。 - 这样新上传的图片就会直接存放在新位置。
- 在“核心设置”中,找到 “附件目录” 选项,将其修改为你之前创建的
-
更新缓存和重新生成内容:
- 进入“系统” -> “更新缓存”,更新所有系统缓存。
- 这是最耗时但至关重要的一步:
- 进入“生成” -> “HTML更新”。
- 选择“更新主页”、“更新栏目页”、“更新文档页”。
- 建议全选并更新,确保所有已存在的页面都使用新的图片路径。
第四步:测试与最终调整
-
检查页面源码:
- 清除浏览器缓存,访问你的网站首页和一些文章页。
- 右键选择“查看网页源代码”,检查
<img>标签的src属性、<link>标签的href属性(CSS)、<script>标签的src属性(JS)。 - 确认它们的路径是否已经正确地指向了
http://static.yourdomain.com/...。
-
检查图片是否正常显示:
逐个检查页面上的图片、CSS样式、JS脚本是否都能正常加载,如果出现404错误,说明路径或服务器配置有问题。
-
处理旧数据(可选但推荐):
- 如果你的网站已经运行很久,数据库中
dedecms_archives等表里的litpic(缩略图) 和body(文章内容) 字段可能还存着旧的相对路径(如/uploads/xxx.jpg)。 - 你需要写一个SQL语句,批量替换这些字段的内容,将旧的路径替换成新的域名路径。
- 替换文章内容中的旧路径:
UPDATE `dede_archives` SET `body` = REPLACE(`body`, 'src="/uploads/', 'src="http://static.yourdomain.com/uploads/');
- 替换缩略图路径:
UPDATE `dede_archives` SET `litpic` = REPLACE(`litpic`, '/uploads/', 'http://static.yourdomain.com/uploads/');
- ⚠️ 警告:在执行SQL更新前,务必备份数据库!可以先在测试环境操作,确认无误后再在生产环境执行。
- 如果你的网站已经运行很久,数据库中
总结与注意事项
-
优点:
- 性能提升:浏览器可以同时对主站和二级域名发起请求,并行下载资源,加快页面加载速度。
- SEO优化:减少主站服务器的负载,提升用户体验,对SEO有正面影响。
- 资源隔离:静态资源服务器可以配置不同的缓存策略,更易于管理。
-
注意事项:
- HTTPS支持:如果你的主站启用了HTTPS,也需要为二级域名配置SSL证书,并在代码中使用
https://static.yourdomain.com。 - CDN集成:这是进阶操作,你可以在
static域名前接入CDN,将图片等资源分发到全球节点,速度会更快。 - 修改的维护:升级织梦版本时,你修改过的
dedesql.class.php文件可能会被覆盖,需要重新应用你的修改。
- HTTPS支持:如果你的主站启用了HTTPS,也需要为二级域名配置SSL证书,并在代码中使用
按照以上步骤操作,你就可以成功地将织梦CMS的图片迁移到二级域名下了,如果在操作中遇到具体问题,可以随时提出,我会尽力帮助你解决。
