静态页面为何会“消失”
织梦默认开启 HTML 静态生成,文章页、列表页、首页都是 .html 文件。这些文件被删的常见原因包括:误执行 rm -rf、FTP 同步覆盖、服务器迁移后漏拷目录、被挂马后清理脚本误伤、磁盘写满导致生成中断留下半截文件。表现为:栏目打开 404、首页空白、单篇文档跳转首页。排查与重建需要按固定顺序处理。
排查:先确认是文件丢失还是权限问题
检查静态目录是否存在
# 织梦默认静态目录
ls -la /www/wwwroot/dedecms/
# 重点查看 a/ html/ list_*.html index.html
ls -la /www/wwwroot/dedecms/a/ | head
ls -la /www/wwwroot/dedecms/index.html
检查目录写权限
生成静态需要 Web 进程对 a/、html/、根目录有写权限。Nginx + PHP-FPM 下通常是 www 用户:
# 确认属主
ls -ld /www/wwwroot/dedecms/a/
# 修正属主与权限
chown -R www:www /www/wwwroot/dedecms/a/
chmod -R 755 /www/wwwroot/dedecms/a/
# 根目录 index.html 必须可写
chmod 666 /www/wwwroot/dedecms/index.html
权限不能图省事设为 777,777 会被安全扫描判定为高危并可能被攻击者利用写入 webshell。
重建步骤一:清理残留缓存
生成前先清掉旧缓存,避免误用过期模板或数据。
# 清理织梦运行缓存
rm -rf /www/wwwroot/dedecms/data/cache/*
rm -rf /www/wwwroot/dedecms/data/tplcache/*
rm -rf /www/wwwroot/dedecms/data/sessions/*
# 删除残留的半截静态文件
find /www/wwwroot/dedecms/a/ -type f -size 0 -delete
进入后台 → 系统 → 系统错误修复 → 清理缓存,再执行“更新系统缓存”。
重建步骤二:一键更新网站
后台路径:生成 → 一键更新网站。建议按以下顺序勾选,避免依赖缺失:
- 更新主页 HTML:生成首页
index.html。 - 更新栏目 HTML:先生成所有列表页
list_*.html。 - 更新文档 HTML:再生成所有文章页
a/xxx.html。 - 更新专题、TAG、自定义列表(按需)。
命令行批量生成(数据量大时)
文章量过万时后台容易超时,建议用织梦自带的 task 接口或自定义脚本分批生成:
php /www/wwwroot/dedecms/makehtml_all.php start=0 end=5000
php /www/wwwroot/dedecms/makehtml_all.php start=5000 end=10000
每批 5000 条,避免内存峰值。
常见生成失败原因
| 现象 | 原因 | 处理 |
|---|---|---|
| 生成按钮无反应 | PHP 超时或内存不足 | php.ini 调大 max_execution_time、memory_limit |
| 生成后页面空白 | 模板语法错误 | 检查模板 {dede:} 标签是否闭合 |
| 部分文章缺失 | arcrank 状态非正常 | UPDATE dede_archives SET arcrank=0 |
| 列表页数量不对 | 缓存未清 | 清 data/cache 后重新生成 |
| 权限拒绝写入 | 属主不对 | chown 改为 Web 用户 |
重建后的验证
- 首页、栏目页、文章页随机抽样访问,确认 200 状态。
- 对比生成前后文章数量:
SELECT COUNT(*) FROM dede_archives WHERE arcrank=0; - 检查静态目录文件数:
find a/ -name "*.html" | wc -l - 提交 sitemap 给百度站长,加速收录恢复。
- 观察 48 小时,确认无新文章丢失。
建议与展望
静态重建后,建议把静态目录纳入定时备份范围,并配置目录权限基线脚本,每天自动校正一次属主与权限。对超大站点考虑把静态 HTML 与动态程序分离部署,静态走 CDN、动态回源,既加快访问又降低误删风险。把“清理缓存 → 一键更新 → 抽样验证”固化为标准动作,未来再遇到静态丢失即可按脚本化流程快速恢复。