问题根源分析
图片不显示,核心原因只有一个:图片的路径错误。

当你在电脑端访问时,图片路径是相对于主站的,/uploads/allimg/230101/123456.jpg,这个路径在电脑端是正确的,因为浏览器会从主域名(如 www.yoursite.com)下去请求这个资源。
当你通过手机端 m.yoursite.com 访问时,浏览器会从 m.yoursite.com 这个域名下去请求图片,如果织梦系统没有正确处理这个跨域请求,就会导致图片路径解析错误,最终出现图片 broken (叉叉) 的现象。
下面我们按照从易到难的顺序来排查和解决。
解决方案(按推荐顺序)
修改手机端模板中的图片路径(最推荐、最彻底)
这是最标准、最正确的解决方法,核心思想是:让织梦系统自动根据当前域名(主站或手机站)生成正确的、完整的图片 URL。

-
找到问题代码: 用代码编辑器(如 VS Code, Sublime Text, Dreamweaver)打开你的手机端模板文件(通常是
/m/目录下的.htm文件)。 找到所有<img>标签,检查它们的src属性,你很可能会看到类似这样的代码:<img src="{dede:field name='litpic'/}" alt="{dede:field name='title'/}" />或者是硬编码的路径:
<img src="/uploads/allimg/230101/123456.jpg" alt="图片描述" />
-
修改为织梦全局标签: 将上述代码修改为使用织梦的全局标签
{dede:global name='cfg_cmspath'/}或{dede:field name='phpurl'/}来拼接出完整的 URL。正确修改示例:
(图片来源网络,侵删)-
对于文章缩略图
{dede:field.name='litpic'/}: 织梦默认的litpic字段通常只返回相对路径,为了确保在手机端也能正确显示,你需要手动拼接完整路径,修改手机端模板中的代码为:<!-- 错误的写法 --> <img src="{dede:field name='litpic'/}" alt="{dede:field name='title'/}" /> <!-- 正确的写法 --> <img src="{dede:global name='cfg_cmspath'/}{dede:field name='litpic'/}" alt="{dede:field name='title'/}" />这里的
{dede:global name='cfg_cmspath'/}会自动替换为你的网站根目录 URL(https://www.yoursite.com),这样无论在主站还是手机站,图片的完整路径都是正确的。 -
页中的图片
{dede:field name='body'/}: 内容页的图片处理比较麻烦,因为它们是存在数据库里的,你需要使用织梦的arc.archives.class.php文件中的ReplaceLitImg函数来处理。 在手机端内容页模板(article_article.htm)中,确保调用文章内容时使用了正确的处理方式。 默认的标签{dede:field name='body'/}在新版织梦中已经能较好地处理,但如果不行,可以尝试以下方法: 在调用文章内容前,先引入处理类,然后进行处理,但这需要一定的 PHP 知识。 更简单的方法:确保你的文章内容在发布时,图片路径是相对路径(即/uploads/...),在手机端模板的<head>部分加入以下代码,织梦会自动处理:<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> {dede:global name='cfg_mobile_site'/}有时,问题出在CSS上,检查你的手机端CSS文件,图片路径是否使用了相对路径,如果是,也建议改成完整路径。
-
检查并配置手机站目录设置
这个步骤确保织梦系统“知道”你的手机站绑定了哪个域名。
-
登录织梦后台:
www.yoursite.com/dede/ -
进入系统设置:在左侧菜单栏找到 “系统” -> “系统基本参数”。
-
找到手机站点设置:在弹出的参数设置页面,找到 “核心设置” 标签页。
-
填写正确信息:
- 手机端网站域名:在这里填写你绑定的手机端域名,
https://m.yoursite.com或http://m.yoursite.com。 - 手机端网站根目录:填写你的手机端网站在服务器上的绝对路径,
/home/wwwroot/m.yoursite.com或/public_html/m。
注意:这里的“手机端网站根目录”必须是手机端模板文件(
/m/目录)所在的物理路径,设置错误会导致模板找不到。 - 手机端网站域名:在这里填写你绑定的手机端域名,
检查并修改 include/extend.func.php 文件
这是一个非常流行的自定义函数,专门用来解决移动端图片路径问题,如果你的网站之前修改过这个文件,请检查它。
- 找到文件:
/include/extend.func.php - 检查是否存在
purl函数:打开文件,搜索function purl或类似的关键字,你可能会找到一个这样的函数:// 适用于手机端路径替换 function purl($url){ if($url == '') return ''; if(strpos($url, '://') !== false) return $url; // 这里的 'm' 是你的手机端目录名,如果你的手机站是二级域名,这里可能需要修改 return str_replace('/m', '', $url); } - 修改函数:这个函数的目的是将手机端路径中的
/m去掉,使其指向主站的资源。如果你的手机站是绑定的二级域名(m.yoursite.com),而不是子目录(www.yoursite.com/m),那么这个函数就是错误的。- 如果是二级域名:这个函数应该被删除或注释掉,因为它会干扰正常的路径解析,二级域名的图片路径应该由方案一来处理。
- 如果是子目录:确保函数中的
/m和你的实际目录名一致。
检查服务器配置(Nginx/Apache)
如果以上方法都无效,问题可能出在服务器层面,特别是使用了二级域名时。
-
Nginx 配置: 检查你的 Nginx 配置文件(通常在
/etc/nginx/sites-available/或/usr/local/nginx/conf/vhost/目录下)。 确保m.yoursite.com的虚拟主机配置中,有正确的root指向,并且没有错误的rewrite规则拦截了对uploads等目录的访问。 一个标准的配置片段如下:server { listen 80; server_name m.yoursite.com; root /home/wwwroot/m.yoursite.com; # 指向手机站目录 index index.php index.html; # 确保能正常访问 PHP 文件 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } -
Apache 配置: 检查
.htaccess文件,确保没有RewriteRule会错误地将手机站的请求重定向到主站或其他地方。
总结与排查步骤建议
遇到这个问题,请按照以下步骤进行排查,90% 的问题都能解决:
- 第一步(最重要):检查手机端模板文件(
.htm)中的<img src="...">标签,务必使用方案一的方法,将路径修改为{dede:global name='cfg_cmspath'/}开头的完整路径。 这是治本的方法。 - 第二步:登录织梦后台,检查“系统基本参数”中的“手机站点设置”,确保域名和根目录填写正确。
- 第三步:检查
/include/extend.func.php文件,看是否有purl等自定义路径函数,并根据你的手机站是二级域名还是子目录,决定是否删除或修改它。 - 第四步:如果网站使用了CDN,请登录CDN管理后台,确保你的手机端域名
m.yoursite.com已经正确开启了CDN,并且没有配置错误的回源规则。 - 第五步:如果以上都无效,再考虑检查服务器的 Nginx/Apache 配置。
通常情况下,问题都出在第一步,请务必优先检查和修改模板代码。
