织梦如何清理历史静态html文件

织梦每次“一键更新”都会在 /a/ 下生成新的 HTML 文件,但删除文章、改 URL 规则后旧文件并不会自动清理,日积月累磁盘占用惊人,还可能被搜索引擎抓到造成“死页面”。本文给出系统化的清理方案。

一、为什么会有历史静态文件

这些文件占磁盘、被搜索引擎抓取后产生 404 与重复内容,必须定期清理。

二、第一步:盘点磁盘占用

用 du 查看各目录占用:

du -sh /www/wwwroot/yourdomain.com/a/*
du -sh /www/wwwroot/yourdomain.com/a/2026/*

找出占用最大的年份/月份目录。再用 find 统计 HTML 文件总数:

find /www/wwwroot/yourdomain.com/a -name "*.html" | wc -l

三、第二步:对比数据库找出孤儿文件

核心思路:列出磁盘上所有 HTML 文件名中的 aid,对照 dede_archives 表,找出数据库里已不存在但磁盘上仍有的“孤儿文件”。

<?php
// orphan_clean.php
require_once dirname(__FILE__).'/include/common.inc.php';
$dir='/www/wwwroot/yourdomain.com/a';
$rii=new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
$orphans=[];
foreach ($rii as $f) {
    if (!$f->isFile() || $f->getExtension() !='html') continue;
    if (preg_match('/(\d+)\.html$/', $f->getFilename(), $m)) {
        $aid=intval($m[1]);
        $row=$dsql->GetOne("SELECT id FROM dede_archives WHERE id=$aid");
        if (!$row) {
            $orphans[]=$f->getPathname();
        }
    }
}
file_put_contents(__DIR__.'/orphans.txt', implode("\n", $orphans));
echo "found ".count($orphans)." orphan files\n";
脚本只生成清单不删除,先人工抽样核对再批量删,避免误删。

四、第三步:删除孤儿文件

核对清单后执行:

# 删除清单中的文件
xargs rm -f < /www/wwwroot/yourdomain.com/orphans.txt

# 删除空目录
find /www/wwwroot/yourdomain.com/a -type d -empty -delete

五、按时间清理旧快照

有些场景需要清理 N 天前的 HTML(如测试环境的快照):

# 删除 180 天前的 HTML
find /www/wwwroot/yourdomain.com/a -name "*.html" -mtime +180 -delete

# 删除 180 天前的空目录
find /www/wwwroot/yourdomain.com/a -type d -mtime +180 -empty -delete

六、保留策略

不要无差别清理,建议:

七、自动化定期清理

把清理脚本加入宝塔计划任务,每周日凌晨执行:

0 3 * * 0 /www/server/php/74/bin/php /www/wwwroot/yourdomain.com/orphan_clean.php
0 4 * * 0 xargs rm -f < /www/wwwroot/yourdomain.com/orphans.txt
0 5 * * 0 find /www/wwwroot/yourdomain.com/a -type d -empty -delete

并在脚本里加入日志记录,便于追溯每次清理了多少文件。

八、清理后收尾

  1. 更新 sitemap.xml,删除失效 URL;
  2. 百度搜索资源平台提交死链清单(清理掉的 URL);
  3. 检查 robots.txt 是否需要更新;
  4. 对清理掉的 URL 在 Nginx 配置统一返回 410 Gone,告知搜索引擎已永久删除。

九、注意事项

静态文件清理是织梦运维中常被忽略的环节。建议把“盘点占用 → 孤儿检测 → 计划任务定期清理 → 死链提交”做成固定流程,让站点磁盘占用长期保持健康,同时避免无效页面稀释站点权重。