织梦图片放到二级域名下

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

核心原理

这个方案的核心是 “动静分离”“域名分离”

织梦图片放到二级域名下
(图片来源网络,侵删)
  1. 动静分离:将网站的动态内容(PHP页面、数据库)和静态内容(图片、CSS、JS、HTML文件)分开存放,织梦默认是将静态内容也存放在主站目录下的。
  2. 域名分离:为静态资源创建一个独立的二级域名(static.yourdomain.com),并通过DNS解析到与主站相同的服务器。
  3. URL重写:修改织梦的配置,使其在生成页面时,所有静态资源的路径都指向新的二级域名。

操作步骤(四步走)

第一步:准备工作(服务器和域名配置)

  1. 创建二级域名

    • 登录你的域名解析服务商(如阿里云、腾讯云、Cloudflare等)。
    • 为你的主域名(yourdomain.com)添加一个 CNAMEA 记录,指向你的二级域名。
      • 创建一个名为 static 的主机记录,记录类型为 CNAME,记录值为 yourdomain.com
      • 这意味着访问 static.yourdomain.com 时,会指向与 yourdomain.com 相同的服务器IP。
  2. 服务器配置(Nginx示例)

    • 登录你的服务器,编辑 Nginx 配置文件(通常在 /etc/nginx/nginx.conf/etc/nginx/sites-available/yourdomain.com)。
    • 为你的二级域名创建一个 server 块,并将其指向一个专门存放静态文件的目录。
    # 主站配置
    server {
        listen 80;
        server_name yourdomain.com www.yourdomain.com;
        root /path/to/your/website; # 织梦主站根目录
        # ... 其他主站配置 ...
    }
    # 二级域名 static 配置
    server {
        listen 80;
        server_name static.yourdomain.com;
        # 指向存放静态文件的目录
        # 我们建议在网站根目录下创建一个 'static' 文件夹
        root /path/to/your/website/static;
        # 禁用日志记录(可选,减少IO)
        # access_log off;
        # error_log off;
        # 设置缓存,大幅提升性能
        location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
            expires 1y; # 缓存1年
            add_header Cache-Control "public, no-transform";
        }
        # 如果目录下没有index文件,返回404
        location / {
            try_files $uri =404;
        }
    }
  3. 创建静态文件目录

    • 在你的织梦网站根目录下创建一个名为 static 的文件夹。
    • 将当前网站根目录下的所有静态资源(/uploads/templets/special/plus 等目录下的图片、CSS、JS)复制或移动/path/to/your/website/static 目录下,并保持原有的目录结构。
    • 重启 Nginx 使配置生效:sudo systemctl restart nginx

第二步:修改织梦核心文件

这是最关键的一步,目的是让织梦在生成页面时,自动使用新的二级域名。

织梦图片放到二级域名下
(图片来源网络,侵删)
  1. 定位文件

    • 打开织梦的 include 目录。
    • 找到并编辑 dedesql.class.php 文件,这个文件是织梦数据库操作的核心,很多路径生成逻辑都在这里。
  2. 修改代码

    • dedesql.class.php 文件中,搜索 $GLOBALS['cfg_cmspath']$GLOBALS['cfg_cmsurl'] 这两个变量,织梦在生成绝对路径时会用到它们。

    • 我们需要修改这些变量的值,将它们指向新的二级域名。

    • 找到类似下面的代码块(可能在文件的多个地方,需要仔细查找):

    // ... 其他代码 ...
    if($GLOBALS['cfg_multi_site'] == 'Y')
    {
        $this->fields['templeturl'] = $GLOBALS['cfg_cmsurl'].'/templets/'.$this->fields['templet'];
        $this->fields['imgurl'] = $GLOBALS['cfg_cmsurl'].$this->fields['imgurl'];
    }
    else
    {
        $this->fields['templeturl'] = $GLOBALS['cfg_cmspath'].'/templets/'.$this->fields['templet'];
        $this->fields['imgurl'] = $GLOBALS['cfg_cmspath'].$this->fields['imgurl'];
    }
    // ... 其他代码 ...
    • 修改为:将 $GLOBALS['cfg_cmsurl']$GLOBALS['cfg_cmspath'] 替换为你的二级域名。
    // 定义你的二级域名
    $static_domain = 'http://static.yourdomain.com';
    // ... 其他代码 ...
    if($GLOBALS['cfg_multi_site'] == 'Y')
    {
        // 修改这里
        $this->fields['templeturl'] = $static_domain.'/templets/'.$this->fields['templet'];
        $this->fields['imgurl'] = $static_domain.$this->fields['imgurl'];
    }
    else
    {
        // 修改这里
        $this->fields['templeturl'] = $static_domain.'/templets/'.$this->fields['templet'];
        $this->fields['imgurl'] = $static_domain.$this->fields['imgurl'];
    }
    // ... 其他代码 ...
    • 重要提示dedesql.class.php 文件很大,路径生成逻辑分散,你需要全局搜索 cfg_cmspathcfg_cmsurl,并逐一判断上下文,将所有用于生成静态资源路径的地方都替换成你的 $static_domain,这可能需要一些耐心。

第三步:修改织梦后台配置

  1. 开启全站静态化

    • 登录织梦后台,进入“系统” -> “系统基本参数” -> “核心设置”。
    • 找到 “是否开启织梦全站静态化” 选项,选择 “是”。
    • 找到 “主页链接方式” 选项,选择 “独立页面” 或 “动态页面” 都可以,但推荐使用独立页面(即 .html 后缀)。
  2. 设置附件目录

    • 在“核心设置”中,找到 “附件目录” 选项,将其修改为你之前创建的 static/uploads 目录(相对于网站根目录)。
    • 这样新上传的图片就会直接存放在新位置。
  3. 更新缓存和重新生成内容

    • 进入“系统” -> “更新缓存”,更新所有系统缓存。
    • 这是最耗时但至关重要的一步:
      • 进入“生成” -> “HTML更新”。
      • 选择“更新主页”、“更新栏目页”、“更新文档页”。
      • 建议全选并更新,确保所有已存在的页面都使用新的图片路径。

第四步:测试与最终调整

  1. 检查页面源码

    • 清除浏览器缓存,访问你的网站首页和一些文章页。
    • 右键选择“查看网页源代码”,检查 <img> 标签的 src 属性、<link> 标签的 href 属性(CSS)、<script> 标签的 src 属性(JS)。
    • 确认它们的路径是否已经正确地指向了 http://static.yourdomain.com/...
  2. 检查图片是否正常显示

    逐个检查页面上的图片、CSS样式、JS脚本是否都能正常加载,如果出现404错误,说明路径或服务器配置有问题。

  3. 处理旧数据(可选但推荐)

    • 如果你的网站已经运行很久,数据库中 dedecms_archives 等表里的 litpic (缩略图) 和 body (文章内容) 字段可能还存着旧的相对路径(如 /uploads/xxx.jpg)。
    • 你需要写一个SQL语句,批量替换这些字段的内容,将旧的路径替换成新的域名路径。
    • 替换文章内容中的旧路径:
      UPDATE `dede_archives` SET `body` = REPLACE(`body`, 'src="/uploads/', 'src="http://static.yourdomain.com/uploads/');
    • 替换缩略图路径:
      UPDATE `dede_archives` SET `litpic` = REPLACE(`litpic`, '/uploads/', 'http://static.yourdomain.com/uploads/');
    • ⚠️ 警告:在执行SQL更新前,务必备份数据库!可以先在测试环境操作,确认无误后再在生产环境执行。

总结与注意事项

  • 优点

    • 性能提升:浏览器可以同时对主站和二级域名发起请求,并行下载资源,加快页面加载速度。
    • SEO优化:减少主站服务器的负载,提升用户体验,对SEO有正面影响。
    • 资源隔离:静态资源服务器可以配置不同的缓存策略,更易于管理。
  • 注意事项

    • HTTPS支持:如果你的主站启用了HTTPS,也需要为二级域名配置SSL证书,并在代码中使用 https://static.yourdomain.com
    • CDN集成:这是进阶操作,你可以在 static 域名前接入CDN,将图片等资源分发到全球节点,速度会更快。
    • 修改的维护:升级织梦版本时,你修改过的 dedesql.class.php 文件可能会被覆盖,需要重新应用你的修改。

按照以上步骤操作,你就可以成功地将织梦CMS的图片迁移到二级域名下了,如果在操作中遇到具体问题,可以随时提出,我会尽力帮助你解决。

-- 展开阅读全文 --
头像
织梦如何安装百度编辑器
« 上一篇 01-04
dede 友情链接 内页 首页
下一篇 » 01-04

相关文章

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

目录[+]