dede手机版二级域名图片为何不显示?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

问题根源分析

DedeCMS 的图片存储方式

DedeCMS 在保存文章内容时,默认情况下会将图片路径保存为 相对路径

dede 手机版二级域名图片看不到
(图片来源网络,侵删)
  • 您在后台发布文章时插入了图片 <img src="/uploads/allimg/230101/1-2301011F5090-L.jpg" />
  • 或者,在编辑器里直接上传后,路径可能是 <img src="uploads/allimg/230101/1-2301011F5090-L.jpg" />

二级域名的访问方式

假设您的网站结构如下:

  • PC主站: www.yourdomain.com
  • 手机版: m.yourdomain.com

当用户访问 m.yourdomain.com 时,浏览器会认为这是一个全新的、独立的网站。

冲突点:路径解析错误

我们来分析一下手机版页面上的图片是如何被浏览器请求的:

  • 手机版的页面地址是:http://m.yourdomain.com/news/123.html
  • 页面中的图片路径是:/uploads/allimg/230101/1-2301011F5090-L.jpg

这里的 代表的是 根目录,也就是 m.yourdomain.com 的根目录,浏览器会尝试去请求: http://m.yourdomain.com/uploads/allimg/230101/1-2301011F5090-L.jpg

dede 手机版二级域名图片看不到
(图片来源网络,侵删)

您的图片文件实际存放在 www.yourdomain.com 的根目录下: http://www.yourdomain.com/uploads/allimg/230101/1-2301011F5090-L.jpg

因为 m.yourdomain.com 的服务器上根本没有这个图片路径,所以浏览器会收到一个 404 (Not Found) 错误,图片自然就显示不出来了。


解决方案(推荐顺序)

您可以根据自己的技术能力和需求选择最适合的方案。

最简单粗暴的临时解决方案(不推荐,仅用于测试)

这个方案可以快速验证问题,但会带来新的问题。

dede 手机版二级域名图片看不到
(图片来源网络,侵删)

方法: 在手机版首页的 <head> 标签内加入一行代码,强制所有资源从主域名加载。

<base href="http://www.yourdomain.com/" />

优点:

  • 立刻生效,所有相对路径都会被解析到主域名下。

缺点:

  • 性能差: 每次加载手机版页面,所有图片、CSS、JS 都会从 www 子域名请求,失去了使用二级域名分流和优化的意义。
  • Cookie 问题: 如果主站和手机版使用同一套登录系统,可能会因为 Cookie 作用域问题导致登录状态混乱。

此方案仅用于快速排查问题,绝对不推荐用于线上正式环境


推荐的最佳解决方案(修改配置,一劳永逸)

这是最规范、最彻底的解决方法,通过修改 DedeCMS 的核心配置,让它在保存图片时就自动使用绝对路径。

步骤 1:修改后台配置,让图片保存为绝对路径

  1. 登录您的 DedeCMS 后台。
  2. 进入 “系统” -> “系统基本参数”
  3. 在左侧菜单找到 “核心设置”
  4. 找到 “附件保存形式” 这个选项。
  5. 将其值修改为 “绝对路径”
  6. 点击“保存”。

步骤 2:清理缓存并更新文章

  1. 进入 “系统” -> “系统设置” -> “清除缓存”,执行全站缓存清除。

  2. 进入 “系统” -> “SQL命令工具”

  3. 在命令框中输入以下 SQL 语句,将数据库中已有的旧相对路径批量替换为新的绝对路径:

    -- 请将 yourdomain.com 替换成您自己的主域名
    UPDATE `dede_archives` SET body = REPLACE(body, 'src="/uploads/', 'src="http://www.yourdomain.com/uploads/');
    UPDATE `dede_addonarticle` SET body = REPLACE(body, 'src="/uploads/', 'src="http://www.yourdomain.com/uploads/');
    -- 如果您还有其他内容模型(如图集、软件等),可能需要执行类似的命令
    -- UPDATE `dede_addonsoft` ... 等等

    注意:

    • dede_archives 是文章主表,dede_addonarticle 是文章附加表,根据您的模型可能需要调整。
    • 在执行前,务必备份数据库!以防万一。

步骤 3:验证结果

完成以上两步后,重新生成您的手机版首页和文章页,查看页面源码,您会发现所有的图片路径都已经变成了 http://www.yourdomain.com/... 的形式,这样在手机版二级域名下也能正确加载了。

优点:

  • 一劳永逸: 以后发布的所有文章都会自动使用正确路径。
  • 规范高效: 符合网站开发的最佳实践。
  • 不影响性能: 不会产生方案一的副作用。

通过 Nginx/Apache 配置解决(服务器级方案)

如果您不想修改数据库,或者希望服务器层面自动处理这个问题,可以通过修改 Web 服务器配置来实现。

原理:m.yourdomain.com 的服务器配置中,添加一条规则,将所有对 /uploads/ 目录的请求,代理或重定向www.yourdomain.com 的对应路径。

对于 Nginx 用户:

在您 m.yourdomain.com 的 Nginx 配置文件中(通常在 /etc/nginx/sites-available/ 目录下),在 server 块内添加如下规则:

server {
    listen 80;
    server_name m.yourdomain.com;
    # ... 其他配置 ...
    # 将所有对 /uploads 目录的请求,反向代理到 www 域名
    location /uploads/ {
        proxy_pass http://www.yourdomain.com/;
        # 如果图片是静态资源,可以尝试用重定向,但反向代理更通用
        # rewrite ^/uploads/(.*)$ http://www.yourdomain.com/uploads/$1 permanent;
    }
    # ... 其他配置 ...
}

修改后,执行 nginx -s reload 重载配置即可。

对于 Apache 用户:

在您 m.yourdomain.com.htaccess 文件中(如果不存在则创建)添加以下代码:

<IfModule mod_rewrite.c>
    RewriteEngine On
    # 将所有对 /uploads 目录的请求,重定向到 www 域名
    RewriteRule ^uploads/(.*)$ http://www.yourdomain.com/uploads/$1 [L,R=301]
</IfModule>

R=301 是永久重定向,L 表示这是最后一条规则。

优点:

  • 无需修改网站代码和数据库。
  • 无影响。

缺点:

  • 需要服务器操作权限,对新手不友好。
  • 相比方案二,多了一次服务器请求,理论上性能上会有微小的损耗(但通常可忽略不计)。

总结与建议

方案 优点 缺点 推荐度
方案一 (Base标签) 快速,简单 性能差,有副作用,不正式 ★☆☆☆☆ (仅测试用)
方案二 (修改配置) 一劳永逸,规范高效 需要修改数据库,有操作风险 ★★★★★ (强烈推荐)
方案三 (服务器配置) 无需修改网站,对现有内容友好 需要服务器权限,性能有微小损耗 ★★★★☆ (备选方案)

给您的最终建议:

  1. 首选方案二,虽然需要操作数据库,但这是治本的方法,能从根本上解决问题,并且对未来维护最有利,操作前请一定备份数据库
  2. 如果您对服务器配置非常熟悉,或者无法修改网站源码和数据库,方案三也是一个非常不错的选择。
  3. 不要使用方案一作为长期解决方案。

希望这个详细的解答能帮助您成功解决问题!

-- 展开阅读全文 --
头像
pic单片机C语言编程实例如何入门?
« 上一篇 2025-12-13
dede如何调用当前栏目的一个子栏目?
下一篇 » 2025-12-13

相关文章

取消
微信二维码
支付宝二维码

目录[+]