这是织梦搬家后最常被问的问题之一:明明把整个站点都打包搬过去了,静态 HTML 也在 /a 或 /html 目录里,那到底还要不要重新生成?答案是"看情况",需要根据域名、路径、伪静态配置三个维度判断。
一、什么情况下可以不重新生成
1. 域名未变 + 静态目录未变
如果只是换服务器 IP,域名和站点根目录路径都保持一致,例如原站点 www.example.com/a/2024/01/01.html,新站点也是同样 URL,那么静态页里的内部链接、图片地址、栏目导航都是相对路径或与原域名一致,无需重新生成。
2. 静态页面已使用相对路径
检查任意一篇静态 HTML 源码,如果图片是 /uploads/...、栏目链接是 /news/ 这种相对路径,跨服务器只要目录结构不变,就能直接访问。
二、什么情况下必须重新生成
1. 域名发生变化
原 old.com 迁到 new.com,静态页里写死的 http://old.com/uploads/... 会全部失效,必须重新生成。生成前先在后台改"站点根网址"为新域名。
2. 站点安装路径变化
原站点装在 /var/www/html/dedecms,新站点装在 /var/www/html,静态页里的相对路径会错位(多一层或少一层),需要重新生成。
3. 改了伪静态/SEO 链接格式
把动态改成伪静态、或调整了栏目 URL 规则,所有静态页里的"上一篇/下一篇/相关推荐"链接都需要重新生成才能更新。
4. 改了模板或站点参数
模板修改、友情链接更换、广告位调整、站点标题/关键词变化,都要重新生成静态页才能让前台体现出来。
三、重新生成操作步骤
1. 改好后台参数
系统 → 系统基本参数:站点根网址、网页主页链接、CMS 安装目录都改对。
2. 一次生成全部
后台 → 生成 → 一键更新网站 → 选择"更新所有" → 开始更新。
3. 分栏目更新(大站推荐)
生成 → 栏目 HTML → 选择单个栏目 → 设置起始 ID → 生成。每次生成 1000 篇,避免超时。
4. 命令行生成(最大站)
cd /www/wwwroot/域名 php makehtml_all.php
或在 PHP 中执行:
php -r "require 'include/common.inc.php'; require 'dede/makehtml_all.php';"
max_execution_time 改为 0、memory_limit 改为 512M,避免中途被掐断。四、如何验证是否需要重新生成
1. 用浏览器打开任意一篇静态页,按 F12 查看源码,搜索旧域名或旧路径,能搜到就必须重新生成。
2. 点击栏目导航、上一篇、相关推荐等内部链接,如果 404 或跳错,说明静态页里的链接已过期。
3. 查看首页右下角"最后更新时间",如果不等于搬家时间,说明首页仍是旧静态。
五、注意事项
1. 重新生成前清空 /data/cache/ 和 /a/(或 /html/)旧文件,避免新旧混淆。
2. 大站分批生成时,记录每次的起始 ID,避免重复生成浪费时间。
3. 生成完成后查看 Nginx/Apache 访问日志,确认 200 状态码占绝大多数,没有大量 404。
4. 如果是 HTTPS 站点,记得把模板里的 http:// 全部改成 https://,否则混合内容警告。
/a 或 /html 目录,万一新模板有错,可以快速回滚老静态页。判断织梦搬家后是否需要重新生成静态页,关键是看"域名、路径、模板"三要素有没有变。三样都没变,可以直接复用老静态文件;任意一样变了,就必须重新跑一次生成。建议把"一键更新网站"列入搬家 SOP 标准流程,无论是否必要都做一次,能让前台与后台配置完全一致,是最稳妥的做法。完成后用日志工具核对一次 404 比例,确保用户访问无死角。