使用全局变量 {dede:global}
DedeCMS 强烈推荐使用全局变量来定义网站的根目录,而不是在模板中写死绝对路径(如 )或相对路径(如 ),这样做的好处是:

- 可移植性强:当你把网站从本地环境(如
localhost)迁移到线上服务器时,只需要修改一个全局变量的值,所有模板中的路径都会自动更新,无需逐个修改模板文件。 - 维护方便:统一管理,不易出错。
全局变量名称
DedeCMS 默认的全局变量名称是 cfg_cmspath,它指向你网站的根目录,通常是一个绝对路径,
- 本地环境:
http://localhost/your_site - 线上环境:
http://www.yourdomain.com
如何在模板中使用图片路径
下面我们分几种常见情况来说明具体用法。
调用全局变量
在模板文件(.htm)中,使用以下语法来调用全局变量:
{dede:global name='cfg_cmspath'/}
这个标签在渲染时会被替换成你在后台设置的网站根目录 URL。

常见应用场景
调用模板目录下的图片
这是最常见的情况,你的图片存放在 /templets/default/ 目录下。
假设图片路径是:/templets/default/images/logo.png
错误写法(不推荐):

<img src="/templets/default/images/logo.png" alt="Logo">
这种写法在根目录下访问正常,但如果网站放在子目录(如 http://www.domain.com/my_site/),图片就会找不到。
正确写法(推荐):
<img src="{dede:global name='cfg_cmspath'/}/templets/default/images/logo.png" alt="Logo">
解析:
{dede:global name='cfg_cmspath'/}会被替换为http://www.yourdomain.com。- 最终生成的 HTML
<img src="http://www.yourdomain.com/templets/default/images/logo.png" alt="Logo">,无论网站部署在哪个目录下,这个路径都是正确的。
简写写法(更推荐):
DedeCMS 提供了一个简化的全局变量标签 {dede:global/},它默认指向 cfg_cmspath,所以上面的代码可以简化为:
<img src="{dede:global/}/templets/default/images/logo.png" alt="Logo">
最佳实践:
为了避免每次都写长长的路径,你可以在模板的公共头部(如 head.htm)定义一个变量。
在 head.htm 中加入:
{dede:global name='cfg_templets_dir'/}/images/
cfg_templets_dir是 DedeCMS 内置的变量,直接指向/templets/目录。- 这个标签会被渲染成
/templets/default/images/(假设你使用的是 default 模板)。
然后在其他模板文件中,你就可以这样调用:
<img src="{dede:global name='my_img_path'/}logo.png" alt="Logo">
或者更直接地在 head.htm 里定义好图片基础路径:
{dede:global name='cfg_templets_dir'/}/default/images/
然后在页面中:
<img src="{dede:global name='cfg_templets_dir'/}/default/images/logo.png" alt="Logo">
这是最清晰、最灵活的方式。
调用网站根目录下的图片
如果你的图片存放在 /images/ 目录(即网站根目录下的 images 文件夹)。
正确写法:
<img src="{dede:global/}/images/banner.jpg" alt="Banner">
调用文章或栏目内容中的图片
这种情况最复杂,因为图片路径是保存在数据库里的,通常是相对路径(如 ../uploads/images/2025/10/a.jpg)。
DedeCMS 提供了 {dede:field} 标签的 function 属性来处理这个问题,它会自动将文章中的相对路径转换为基于网站根目录的绝对路径。
假设文章内容里有一张图片:<img src="../uploads/allimg/230101/1-2301011F530.jpg" ...>
错误写法:
直接使用 {dede:field.body/},图片路径会是错误的。
正确写法(推荐):
{dede:field.body function='htmlspecialchars(@me)'/}
或者更明确地使用 str_replace 来处理:
{dede:field.body function='str_replace("../","{dede:global/}/",@me)'/}
解析:
function='...'表示对field.body的内容执行一个 PHP 函数。str_replace("../","{dede:global/}/",@me)会查找内容中所有的 ,并将其替换为{dede:global/}/的值。{@me}是一个特殊变量,代表当前标签的原始值(在这里就是field.body的内容)。- 使用
htmlspecialchars()可以防止 XSS 攻击,是更安全的做法。
如何设置全局变量
你需要确保 cfg_cmspath 的值是正确的。
- 登录 DedeCMS 后台。
- 进入 【系统】 -> 【系统基本参数】。
- 在左侧菜单选择 【核心设置】。
- 找到 “站点根目录URL” 这一项,确保它的值是正确的网站地址(
http://www.yourdomain.com),并且不要在末尾加上斜杠 。
总结与最佳实践
| 场景 | 推荐写法 | 说明 |
|---|---|---|
| 模板内图片 | {dede:global name='cfg_templets_dir'/}/default/images/logo.png |
使用 cfg_templets_dir 变量,清晰且易于维护。 |
| 根目录图片 | {dede:global/}/images/banner.jpg |
使用简化的全局变量 {dede:global/}。 |
| 文章/栏目图片 | {dede:field.body function='htmlspecialchars(@me)'/} |
使用 function 属性自动处理路径,安全可靠。 |
| CSS/JS 引入 | <link rel="stylesheet" href="{dede:global name='cfg_templets_dir'/}/default/style.css"> |
同样推荐使用全局变量。 |
核心要点:
- 永远不要写死绝对路径 ,除非你确定网站永远只部署在根目录。
- 优先使用 DedeCMS 的全局变量,特别是
{dede:global name='cfg_cmspath'/}和{dede:global name='cfg_templets_dir'/}。 - 在公共模板文件(如
head.htm)中定义好路径变量,然后在各页面中调用,这是最规范的做法。 - 处理文章内容图片时,务必使用
function属性,让 DedeCMS 自动帮你转换路径。
遵循以上原则,你的 DedeCMS 网站图片路径问题基本就可以一劳永逸了。
