- 主站与子站:一个主站下有多个子站,需要共享部分内容或图片。
- 内容分发:将一篇文章(包含图片)同时发布到多个不同的网站上。
- 网站迁移:将旧网站的内容(包括图片)整合到新网站。
核心问题在于:当文章被复制或引用到另一个网站时,文章内容中的图片路径(如 /uploads/allimg/2025/10/01/01.jpg)仍然是相对于原网站的,导致在新网站上无法显示。

(图片来源网络,侵删)
下面我将分三种情况,为您提供最有效的解决方案。
使用DedeCMS内置的“采集”功能(推荐用于内容同步)
这是DedeCMS官方提供的、最标准的内容同步方式,可以很好地处理图片路径问题。
工作原理:
采集功能在抓取远程网站内容时,会自动将文章中的图片下载到你当前目标网站的 /uploads/ 目录下,并自动替换文章中的图片路径为你本地网站的路径。
操作步骤:

(图片来源网络,侵删)
- 在目标网站登录后台:登录你希望内容同步到的那个网站的后台(网站B)。
- 进入采集管理:在后台菜单中找到
采集->采集侠或远程文章。 - 创建新任务:
- 来源网址:输入你想要采集内容的那篇文章的URL(网站A上的文章)。
- 保存位置:选择你希望文章发布到的栏目(这个栏目必须在网站B下)。
- 规则配置:
- :设置文章标题的抓取规则。
- :设置文章内容的抓取规则。最关键的一步是规则中,确保勾选了 “下载远程图片并本地化” 或类似的选项。
- 开始采集:保存任务并开始采集,DedeCMS会自动完成以下操作:
- 获取文章标题和内容。
- 扫描文章内容中的所有
<img>- 将这些图片下载到网站B的
/uploads/目录下(可能会按日期新建文件夹)。- 中的图片路径(如
src="/uploads/allimg/2025/10/01/01.jpg")替换为网站B本地的新路径。- 将处理好的文章保存到网站B的数据库中。
- 将这些图片下载到网站B的
优点:
- 官方功能,稳定可靠。
- 自动处理图片下载和路径替换,一劳永逸。
- 两个网站是完全独立的,互不影响。
缺点:
- 会占用目标网站(网站B)的磁盘空间。
- 图片是复制过去的,不是共享的。
使用“数据库搬家”或“内容调用”方式(适用于深度整合)
如果你的两个网站共享同一个数据库,或者你想通过代码直接调用另一个网站的内容,那么需要手动处理路径。
方法 A:共享数据库 + 修改配置文件
如果两个网站使用同一个数据库,但希望有不同的前台展示,可以通过修改配置文件来改变路径前缀。

(图片来源网络,侵删)
- 数据库:确保两个网站连接的是同一个数据库,并且文章数据表(如
dede_archives和dede_addonarticle)是共享的。 - 修改
include/config_base.php:- 在这个文件中,有一个关键变量
$cfg_cmspath,它定义了CMS的安装路径。 - 网站A(主站):
$cfg_cmspath = '/';或指向其具体路径。 - 网站B(子站):需要将其修改为相对于网站根目录的路径,如果网站B安装在
/siteb/目录下,那么网站B的配置就应该是$cfg_cmspath = '/siteb/';。
- 在这个文件中,有一个关键变量
- 效果:这样做可以改变DedeCMS生成链接的基础路径,但不一定能完美解决文章内容中已经存在的旧图片路径,对于文章内容中的硬编码路径,仍需通过下面的方法处理。
方法 B:使用SQL批量替换路径(最直接的方法)
如果你已经将数据导入到了目标网站,但图片路径还是旧的,这是最快速有效的“救急”方法。
操作步骤:
-
登录目标网站(网站B)的后台 ->
系统->SQL命令行工具。 -
执行批量替换:在文本框中输入以下SQL命令,然后点击“查询”执行。
-- 替换文章附加表中的图片路径 UPDATE `dede_addonarticle` SET body = REPLACE(body, '网站A的图片路径', '网站B的图片路径'); -- 如果你的文章内容在主表里(比如某些版本),也需要替换 -- UPDATE `dede_archives` SET body = REPLACE(body, '网站A的图片路径', '网站B的图片路径');
如何填写路径?
- 网站A的图片路径:必须是文章中完整、不变的路径。
src="http://www.websiteA.com/uploads/2025/10/01/01.jpg"src="/uploads/2025/10/01/01.jpg"../uploads/2025/10/01/01.jpg
- 网站B的图片路径:替换成网站B上对应图片的正确路径。
- 如果网站B的图片和网站A在同一个服务器的不同目录,可能是
"/siteb/uploads/2025/10/01/01.jpg"。 - 如果图片已经移动到网站B的
/uploads/下,"/uploads/2025/10/01/01.jpg"。
- 如果网站B的图片和网站A在同一个服务器的不同目录,可能是
示例:
假设网站A的图片路径是 src="http://oldsite.com/uploads/",而你希望网站B显示的图片路径是 src="/uploads/"。
UPDATE `dede_addonarticle` SET body = REPLACE(body, 'src="http://oldsite.com/uploads/', 'src="/uploads/');
警告:
- 操作前务必备份数据库! 一旦执行错误,数据难以恢复。
- 这个方法非常暴力,可能会误替换掉路径中包含相似字符串的其他内容,请务必确保你的替换路径是精确的。
使用Nginx或Apache的URL重写(适用于图片服务器分离)
这是一种高级方案,适用于你想让两个网站共享同一套图片文件,但通过不同的域名或路径来访问它们。
原理: 不修改数据库中的路径,而是通过Web服务器的配置,将一个网站的图片请求“转发”或“映射”到另一个网站的图片实际位置。
Nginx 示例
假设:
- 网站A的图片实际存储在
/var/www/siteA/uploads/。 - 网站B的数据库中图片路径是
/uploads/...。 - 你希望访问网站B时,
/uploads/的请求指向网站A的图片目录。
在网站B的Nginx配置文件中添加 alias 或 rewrite 规则:
# 在 server 块内添加
location /uploads/ {
# alias 指令会将 /uploads/ 映射到服务器的文件系统路径
alias /var/www/siteA/uploads/;
# 如果网站A和网站B在同一服务器的不同域名下,也可以用 rewrite
# rewrite ^/uploads/(.*)$ http://images.websiteA.com/uploads/$1 last;
}
Apache 示例
同样假设,在网站B的 .htaccess 文件或虚拟主机配置中添加:
# Apache 的 Alias 指令
Alias /uploads/ "/var/www/siteA/uploads/"
<Directory "/var/www/siteA/uploads/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
优点:
- 节省磁盘空间:图片只存一份。
- 维护简单:只需维护一套图片文件。
- 数据库无需修改:保持了数据的原始性。
缺点:
- 配置相对复杂,需要服务器权限。
- 两个网站的服务器必须在同一台机器上,或者网络可以互通。
- 增加了一层代理,可能对性能有轻微影响。
总结与建议
| 场景 | 推荐方案 | 优点 | 缺点 | 适用人群 |
|---|---|---|---|---|
| 同步 | DedeCMS采集 | 官方支持,自动化程度高,稳定可靠 | 会占用目标网站空间 | 所有大DedeCMS用户,尤其是新手和中级用户 |
| 一次性数据迁移/修正 | SQL批量替换 | 最直接,见效快,无需复杂配置 | 风险高,可能误伤,需备份数据库 | 有一定数据库经验的开发者,用于处理历史数据 |
| 长期共享图片资源 | Web服务器重写 | 节省空间,维护方便,数据库纯净 | 配置复杂,有服务器要求 | 有服务器管理经验的开发者,构建大型网站集群 |
给您的最终建议:
- 如果您只是偶尔需要将网站A的文章同步到网站B,请优先使用“采集”功能(场景一),这是最符合DedeCMS设计理念也是最安全的方法。
- 如果您已经完成了数据迁移,发现图片路径不对,请使用“SQL批量替换”(场景二)来快速修正,但操作前一定要备份数据库!
- 如果您正在规划两个网站,希望它们能深度整合并共享图片资源,那么从架构层面就考虑“Web服务器重写”(场景三)。
