dede整站图片如何适配二级域名调用?

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

将网站中的图片地址(URL)从原来的相对路径或主域名路径,批量修改为指向二级域名的绝对路径。

dede整站图片在二级域名下调用的方法
(图片来源网络,侵删)

下面我将为你提供详细、分步的操作方法,涵盖从配置到修改的全过程。


第一步:准备工作与服务器配置

在修改 DedeCMS 之前,必须确保你的服务器已经正确配置了二级域名,并且该域名可以正常访问到你的图片资源。

  1. 创建二级域名

    • 在你的域名解析管理后台(如阿里云、腾讯云等),为你的主域名(yourdomain.com)添加一个 A 记录或 CNAME 记录,指向你的服务器 IP。
    • 创建一个二级域名 img.yourdomain.com
  2. 配置服务器虚拟主机

    dede整站图片在二级域名下调用的方法
    (图片来源网络,侵删)
    • Nginx 配置示例: 你需要在 Nginx 的配置文件中,为 img.yourdomain.com 这个域名单独创建一个 server 块,并将其 root 指向你 DedeCMS 网站中存放图片的目录。

      # 主站配置
      server {
          listen 80;
          server_name yourdomain.com www.yourdomain.com;
          root /path/to/your/dedecms; // DedeCMS 根目录
          # ... 其他主站配置
      }
      # 图片服务器配置
      server {
          listen 80;
          server_name img.yourdomain.com;
          root /path/to/your/dedecms/uploads; // 直接指向上传目录
          # 防止盗链的配置(可选但推荐)
          location ~* \.(jpg|jpeg|png|gif|bmp|swf)$ {
              valid_referers none blocked yourdomain.com www.yourdomain.com;
              if ($invalid_referer) {
                  return 403;
              }
          }
          # 缓存配置(可选,提升性能)
          location ~* \.(jpg|jpeg|png|gif|bmp|swf)$ {
              expires 7d;
              add_header Cache-Control public;
          }
      }
    • Apache 配置示例: 在 Apache 的虚拟主机配置文件中,同样需要为 img.yourdomain.com 创建一个 VirtualHost

      # 主站配置
      <VirtualHost *:80>
          ServerName yourdomain.com
          DocumentRoot /path/to/your/dedecms
          # ... 其他主站配置
      </VirtualHost>
      # 图片服务器配置
      <VirtualHost *:80>
          ServerName img.yourdomain.com
          DocumentRoot /path/to/your/dedecms/uploads
          # 防止盗链的配置(可选但推荐)
          <IfModule mod_rewrite.c>
              RewriteEngine On
              RewriteCond %{HTTP_REFERER} !^$
              RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
              RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?img.yourdomain.com [NC]
              RewriteRule \.(jpg|jpeg|png|gif|bmp|swf)$ - [F]
          </IfModule>
          # 缓存配置(可选)
          <IfModule mod_expires.c>
              ExpiresActive On
              ExpiresByType image/jpeg "access plus 7 days"
              ExpiresByType image/png "access plus 7 days"
              ExpiresByType image/gif "access plus 7 days"
          </IfModule>
      </VirtualHost>
    • 重要提示:修改完 Nginx 或 Apache 配置后,务必执行 nginx -s reloadservice apache2 restart / service httpd restart 命令使配置生效。

  3. 测试图片服务器

    dede整站图片在二级域名下调用的方法
    (图片来源网络,侵删)
    • 在 DedeCMS 后台随便上传一张图片,假设路径是 /uploads/allimg/230101/123456.jpg
    • 在浏览器中访问 http://img.yourdomain.com/uploads/allimg/230101/123456.jpg,如果图片能正常显示,说明服务器配置成功,这是后续所有操作的基础。

第二步:修改 DedeCMS 配置(推荐方法)

这是最安全、最规范的方法,通过修改 DedeCMS 的核心配置文件,让系统在调用图片时自动使用新的域名。

  1. 找到核心函数文件

    • DedeCMS 调用图片的路径通常由一个函数决定,这个函数位于 /include/helpers/channelunit.helper.php 文件中。
  2. 修改函数 GetMkUrl()

    • 用代码编辑器打开 /include/helpers/channelunit.helper.php 文件。
    • 找到 function GetMkUrl($typeid, $typeurl, $namerule, $isdefault, $ispart, $siteurl, $sitepath) 这个函数。
    • 在函数内部,找到生成图片路径的代码段,通常是在返回 $typeurl$murl 之前。
    • 修改思路:在最终返回的 URL 前面,拼接上你的图片服务器域名。

    修改示例(V5.7 版本为例): 在函数的末尾,return $murl; 这行代码之前,加入以下代码:

    // 在 return $murl; 之前添加
    // 判断是否为图片路径,如果是则替换域名
    if (strpos($murl, '/uploads/') !== false) {
        // 定义你的图片服务器域名
        $img_domain = 'http://img.yourdomain.com';
        // 将原路径中的域名替换为图片服务器域名
        // 使用 preg_replace 来确保只替换域名部分,不影响路径
        $murl = preg_replace('/^https?:\/\/[^\/]+/', $img_domain, $murl);
    }
    • 代码解释
      • strpos($murl, '/uploads/') !== false:判断生成的路径是否包含 /uploads/,这是 DedeCMS 默认的图片上传目录,你可以根据实际情况调整这个判断条件。
      • $img_domain = 'http://img.yourdomain.com':设置你的图片服务器域名。
      • preg_replace(...):这是一个强大的替换函数,它会找到 URL 开头的 http://... 部分,并将其替换为你设置的 $img_domain
  3. 保存文件并测试

    • 保存修改后的 channelunit.helper.php 文件。
    • 清空浏览器缓存,重新访问你的网站首页和内容页,使用浏览器开发者工具(F12)的 "Network" 面板检查图片的请求地址,你会发现它们已经变成了 http://img.yourdomain.com/... 的形式。

第三步:数据库批量替换(备选或补充方法)

如果你的网站已经运行了很久,数据库中存在大量旧的数据,或者上述方法无法覆盖所有情况(比如自定义模型、内容通过其他方式添加的),那么需要进行数据库的批量替换。

⚠️ 重要警告:操作数据库前,务必备份数据库!

  1. 登录数据库管理工具

    使用 phpMyAdmin 或其他工具登录到你的 DedeCMS 数据库。

  2. 确定要修改的表和字段

    • 主表#@__archives (文章表),主要字段是 litpic (缩略图) 和 body (文章正文)。
    • 附加表#@__addonarticle (文章模型附加表),字段 body
    • 其他模型表:如果你使用了图集、产品等其他模型,还需要修改对应的附加表,#@__addonimages (图集) 等。
    • 自定义字段:任何你用来存放图片路径的自定义字段。
  3. 执行 SQL 替换语句

    • 在 phpMyAdmin 中,选择你的数据库,然后点击 "SQL" 选项卡,执行以下语句。

    替换缩略图 litpic 字段

    UPDATE `#@__archives` SET `litpic` = REPLACE(`litpic`, 'uploads/', 'http://img.yourdomain.com/uploads/');
    • 注意:如果你的图片路径是绝对路径(如 http://yourdomain.com/uploads/...),则需要这样替换:
      UPDATE `#@__archives` SET `litpic` = REPLACE(`litpic`, 'http://yourdomain.com/uploads/', 'http://img.yourdomain.com/uploads/');

    替换文章正文 body 字段body 字段内容量大,且结构复杂,直接替换可能会有风险,建议使用更精确的替换。

    UPDATE `#@__archives` SET `body` = REPLACE(`body`, 'src="/uploads/', 'src="http://img.yourdomain.com/uploads/');
    UPDATE `#@__archives` SET `body` = REPLACE(`body`, 'src="uploads/', 'src="http://img.yourdomain.com/uploads/');
    -- 如果原路径是带域名的
    UPDATE `#@__archives` SET `body` = REPLACE(`body`, 'src="http://yourdomain.com/uploads/', 'src="http://img.yourdomain.com/uploads/');
    • 图集等多媒体内容:DedeCMS 的图集等内容通常存储在 body 字段中,使用上面的 body 替换语句通常可以覆盖。

    替换其他附加表

    -- 替换文章模型附加表的body
    UPDATE `#@__addonarticle` SET `body` = REPLACE(`body`, 'src="/uploads/', 'src="http://img.yourdomain.com/uploads/');
  4. 验证结果

    执行完 SQL 后,登录网站后台,更新一下缓存(系统 -> 数据库备份/恢复 -> 数据库表优化),然后前台刷新页面,检查图片是否已成功切换到二级域名。


总结与最佳实践

方法 优点 缺点 适用场景
修改核心函数 一劳永逸,未来上传的图片自动生效,代码规范,不易出错。 需要修改核心文件,升级 DedeCMS 时可能需要重新修改。 强烈推荐,作为主要解决方案。
数据库批量替换 可以一次性修改历史数据,覆盖面广。 操作有风险(需备份数据库),可能遗漏某些字段,对大表操作较慢。 用于处理历史遗留数据,或作为核心函数方法的补充。

最佳实践流程

  1. 完成第一步:确保服务器配置和二级域名访问正常。
  2. 执行第二步:修改 channelunit.helper.php 文件,这是最关键的步骤。
  3. 执行第三步:登录数据库,对 #@__archives 等核心表的 litpicbody 字段执行一次性的批量替换,以处理所有历史内容。
  4. 最终测试:全面检查网站首页、列表页、内容页、图集等所有涉及图片的地方,确保所有图片都从新的二级域名加载。

通过以上步骤,你就可以成功地将 DedeCMS 整站的图片调用迁移到二级域名下了。

-- 展开阅读全文 --
头像
C语言deleteallitems函数如何正确实现与使用?
« 上一篇 2025-12-02
织梦uploads文件夹上传空间是哪个文件?
下一篇 » 2025-12-02

相关文章

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

目录[+]