织梦5.7图片如何绑定二级域名?

99ANYc3cd6
预计阅读时长 27 分钟
位置: 首页 织梦建站 正文

核心原理

织梦图片二级域名的原理是:

  1. 将网站的图片资源(/uploads/目录下的所有文件)指向到一个新的二级域名img.yourdomain.com
  2. 在织梦的程序中,修改生成图片链接的规则,让所有图片的URL都从原来的 https://www.yourdomain.com/uploads/... 变成 https://img.yourdomain.com/uploads/...
  3. 通过服务器配置,让 img.yourdomain.com 域名能够正确访问到服务器上的 /uploads/ 目录

第一步:服务器配置(以Nginx为例)

这是最关键的一步,如果配置错误,图片将无法显示。

假设你的主域名是 www.yourdomain.com,你希望图片域名为 img.yourdomain.com

  1. 添加DNS解析 登录你的域名解析服务商(如阿里云、腾讯云等),为 img.yourdomain.com 添加一个 A 记录,指向你的服务器IP地址,确保解析生效(可能需要几分钟到几小时)。

  2. Nginx 服务器配置 登录你的服务器,找到Nginx的配置文件,通常位于 /etc/nginx/nginx.conf/etc/nginx/sites-available/ 目录下的站点配置文件(yourdomain.com)。

    你需要在你的主域名配置块(server 块)之外,为 img.yourdomain.com 新增一个 server 块。

    配置示例:

    # ==============================================
    # 主域名配置 (www.yourdomain.com)
    # ==============================================
    server {
        listen 80;
        server_name www.yourdomain.com yourdomain.com; # 你的主域名
        # ... 其他主域名的配置,如根目录、伪静态等 ...
        # root /path/to/your/website;
        # include /path/to/your/website/rewrite.conf; # 织梦的伪静态规则
        # ... 其他配置 ...
    }
    # ==============================================
    # 图片二级域名配置 (img.yourdomain.com)
    # ==============================================
    server {
        listen 80;
        server_name img.yourdomain.com; # 图片域名
        # 将网站根目录指向织梦的 uploads 文件夹
        # !!! 请务必将 /path/to/your/website 替换为你网站的实际路径 !!!
        root /path/to/your/website/uploads;
        # 处理图片等静态文件,添加缓存头,提升性能
        location ~* \.(jpg|jpeg|png|gif|ico|css|js|txt|flv|swf)$ {
            expires      30d; # 缓存30天
            add_header   Cache-Control public;
            # 如果你的图片在子目录下,可能需要调整
            # try_files $uri $uri/ =404;
        }
        # 如果你的图片直接放在 uploads 下,不需要下面这段
        # 如果图片在 uploads 的子目录(如images, allimg),需要用 rewrite
        # location / {
        #     rewrite ^/uploads/(.*)$ /$1 break;
        # }
    }
    # 如果你的网站开启了 HTTPS,也需要为图片域名配置 HTTPS
    # server {
    #     listen 443 ssl http2;
    #     server_name img.yourdomain.com;
    #     ssl_certificate /path/to/your/ssl/fullchain.pem;
    #     ssl_certificate_key /path/to/your/ssl/privkey.pem;
    #     root /path/to/your/website/uploads;
    #     ... (与上面的 location 配置相同) ...
    # }

    配置要点解释:

    • server_name img.yourdomain.com;: 指定这个配置块只响应 img.yourdomain.com 的请求。
    • root /path/to/your/website/uploads;: 这是核心! 它告诉Nginx,所有访问 img.yourdomain.com 的请求,都去服务器的 /path/to/your/website/uploads 目录下寻找文件。
    • location ~* \.(jpg|...): 这是一个正则表达式匹配,专门处理图片等静态文件。expires 30d; 设置浏览器缓存,能极大减轻服务器压力并加快用户二次访问速度。
  3. 重启Nginx服务 保存配置文件后,执行以下命令让配置生效:

    sudo nginx -t # 检查配置语法是否正确
    sudo systemctl restart nginx # 重启Nginx服务

直接在浏览器访问 http://img.yourdomain.com/2025/10/xx.jpg 应该就能看到你的图片了。


第二步:织梦DedeCMS程序配置

服务器配置好后,我们需要修改织梦,让它以后发布的文章、产品等内容,都使用新的图片域名。

  1. 修改 include/helpers/channelunit.helper.php 文件 这是织梦生成文章内容、栏目链接等的核心文件,我们需要修改其中的图片路径处理函数。

    • 用FTP或SSH工具,打开你的织梦安装目录。
    • 路径是:/dede/include/helpers/channelunit.helper.php
    • 找到 function GetMkUrl($url, $type) 函数,或者查找 //远程//本地 的判断逻辑。
    • 在函数中,找到返回 $murl 的地方,修改它。

    修改前(示例代码片段):

    // ... 代码 ...
    if($murl=='')
    {
        if($type=='')
        {
            $murl = $GLOBALS['cfg_cmspath']."/".trim($url);
        }
        else
        {
            $murl = $GLOBALS['cfg_cmspath']."/".$type."/".$url;
        }
    }
    return $murl;
    // ... 代码 ...

    修改后(示例代码片段):

    // ... 代码 ...
    if($murl=='')
    {
        // 定义你的图片域名
        $img_domain = 'https://img.yourdomain.com'; // 请替换成你自己的图片域名
        if($type=='')
        {
            // 如果是本地图片,则使用图片域名
            if (strpos($url, 'uploads') !== false) {
                $murl = $img_domain . "/" . trim($url);
            } else {
                $murl = $GLOBALS['cfg_cmspath']."/".trim($url);
            }
        }
        else
        {
            // 如果是本地图片,则使用图片域名
            if (strpos($url, 'uploads') !== false) {
                $murl = $img_domain . "/" . $type . "/" . $url;
            } else {
                $murl = $GLOBALS['cfg_cmspath']."/".$type."/".$url;
            }
        }
    }
    return $murl;
    // ... 代码 ...

    修改逻辑说明: 我们在返回URL前,先判断一下 $url 是否包含 uploads 字符串,如果包含,说明是站内的图片资源,我们就用我们定义好的 $img_domain 来拼接路径,如果不包含,则使用原来的逻辑(通常是处理栏目、文章页等非图片资源)。

  2. 更新数据库中的旧数据(非常重要!) 你网站以前发布的文章、产品等内容,图片地址还是旧的 www.yourdomain.com,你需要批量更新这些数据。

    • 使用织梦SQL命令工具(推荐)

      1. 登录织梦后台,点击【系统】-> SQL命令行工具
      2. 在文本框中输入以下SQL语句(请务必将 www.yourdomain.com 替换成你自己的主域名):
        UPDATE dede_archives SET body = REPLACE(body, 'https://www.yourdomain.com/uploads/', 'https://img.yourdomain.com/uploads/');
      3. 点击【查询执行】。
      4. 为了安全起见,你可能需要对其他几个主要表也执行类似的操作,
        UPDATE dede_addonarticle SET body = REPLACE(body, 'https://www.yourdomain.com/uploads/', 'https://img.yourdomain.com/uploads/');
        UPDATE dede_soft SET body = REPLACE(body, 'https://www.yourdomain.com/uploads/', 'https://img.yourdomain.com/uploads/');
        UPDATE dede_product SET body = REPLACE(body, 'https://www.yourdomain.com/uploads/', 'https://img.yourdomain.com/uploads/');
        -- ... 其他包含内容的表 ...

        注意:dede_archives 是文章主表,body 字段存储的是文章内容,如果你的自定义模型使用了不同的表,请相应调整。

    • 使用PHP脚本批量替换 如果你有很多数据,SQL工具可能会因为超时而失败,可以写一个简单的PHP脚本放在网站根目录下执行。

      <?php
      require_once 'dede/config.php'; // 引入织梦配置
      $db = new DEDEMySQLi();
      $old_domain = 'https://www.yourdomain.com/uploads/'; // 旧域名
      $new_domain = 'https://img.yourdomain.com/uploads/'; // 新域名
      // 需要更新的表和字段
      $tables = [
          'dede_archives' => 'body',
          'dede_addonarticle' => 'body',
          'dede_addonflash' => 'body',
          'dede_addonimages' => 'body',
          'dede_addoninfos' => 'body',
          'dede_soft' => 'body',
          'dede_product' => 'body',
      ];
      foreach ($tables as $table => $field) {
          $query = "UPDATE {$table} SET {$field} = REPLACE({$field}, '{$old_domain}', '{$new_domain}')";
          $db->Execute($query);
          echo "更新表 {$table} 完成。<br>";
      }
      echo "所有更新完成!";
      ?>

      将此文件保存为 update_img_domain.php,然后在浏览器中访问 http://www.yourdomain.com/update_img_domain.php 执行,执行完毕后务必删除此文件。


第三步:验证与最终检查

  1. 清空缓存
    • 在织梦后台,点击【系统】-> 一键更新网站 -> 更新HTML -> 更新文档HTML
    • 清空浏览器缓存,或者使用 Ctrl + F5 强制刷新页面。
  2. 检查网站
    • 打开几篇旧文章和几篇新发布的文章。
    • 使用浏览器的“开发者工具”(F12),切换到“网络”(Network)标签。
    • 查看图片请求的URL,确认它们已经变成了 https://img.yourdomain.com/... 的形式。
    • 确保图片能够正常加载,没有出现404错误。
  3. 检查SEO

    使用站长工具(如百度、Google)的“抓取诊断”功能,检查网站,看图片URL是否正确。


常见问题与注意事项

  • Q: 图片不显示,404错误?

    • 检查1: DNS解析是否生效?
    • 检查2: Nginx的 root 路径是否正确?路径是否指向了 /uploads 目录?
    • 检查3: Nginx配置是否保存并重启?
    • 检查4: 织梦程序配置修改后,是否更新了数据库?
  • Q: 修改了 channelunit.helper.php 后,新发布的文章图片还是旧域名?

    确保你修改的文件路径正确,并且已经保存,清空浏览器缓存,或者使用无痕模式访问。

  • Q: 网站开启了HTTPS,图片域名是HTTP,导致页面不安全(混合内容)?

    • 解决方案: 在第一步的Nginx配置中,为 img.yourdomain.com 配置好HTTPS(参考配置文件中的注释部分),然后在织梦的程序配置中,将 $img_domain 的值改为 https://img.yourdomain.com
  • Q: 这个方法会影响附件下载吗?

    • 会,因为织梦默认把附件也放在 uploads 目录下,如果你不想让附件也走图片域名,你需要修改Nginx配置,让特定类型的文件(如 .zip, .rar)不走 img 域名,或者修改织梦代码,更精细地判断文件类型。
  • 性能提升原理:

    • 减少Cookie传输: 浏览器对同一域名的并发连接数有限制,当图片使用独立域名时,浏览器可以同时从 wwwimg 两个域名下载资源,突破了并发限制,加快了页面加载速度。
    • 利用CDN: 你只需要在图片域名上启用CDN,就能轻松实现图片的全球加速和缓存,这是将图片放在主域名下无法比拟的优势。
    • 服务器负载均衡: 图片流量和网站程序流量分离,可以更均衡地分配服务器资源。

按照以上步骤,你应该就能成功为你的织梦5.7网站配置好图片二级域名了,祝你操作顺利!

-- 展开阅读全文 --
头像
c语言 elementtype
« 上一篇 01-05
dede apache伪静态化如何配置实现?
下一篇 » 01-05

相关文章

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

目录[+]