第一步:基础检查(最常见的原因)
在深入复杂的设置之前,请务必先检查这几点,它们解决了80%以上的问题。

(图片来源网络,侵删)
检查目录权限(重中之重)
Dede生成静态文件,本质上是将HTML内容写入到服务器的指定目录中,如果目录没有写入权限,生成必然会失败。
-
需要检查的目录:
- 网站根目录:通常是 或
/wwwroot/ - 目录:后台设置中的“附件目录”,默认是
/uploads/或/data/ - HTML文件生成目录:后台“系统” -> “核心设置” -> “栏目目录默认规则” 和 “文章命名规则” 所指向的目录,规则是
{typedir}/{Y}/{M}/{D}-{aid}.html,那么就需要确保{typedir}及其下的子目录(如/a/2025/10/)有写入权限。
- 网站根目录:通常是 或
-
如何设置权限(Linux系统):
- 通过FTP或SSH连接到你的服务器。
- 找到上述目录,右键 -> 文件权限 -> 将“所有者”或“用户”的权限设置为 “读”和“写” (即
7或6)。 - 最简单粗暴但有效的方法(仅限测试):将这些目录的权限设置为 777。注意:生产环境请谨慎使用777,存在安全风险。 生成成功后,应立即改回更安全的权限(如755)。
检查服务器磁盘空间
如果服务器的硬盘空间已满,Dede自然无法写入任何新文件。

(图片来源网络,侵删)
- 如何检查:
- 通过SSH登录,执行
df -h命令。 - 或通过FTP/主机控制面板查看磁盘使用情况。
- 如果空间不足,请清理不必要的文件(如日志、旧备份、临时文件)或升级空间。
- 通过SSH登录,执行
检查 .htaccess 文件冲突
如果你的网站开启了伪静态(URL重写),.htaccess 文件中的规则可能会干扰Dede的生成过程,特别是当规则与Dede的HTML文件路径冲突时。
- 如何检查:
- 进入网站根目录,找到
.htaccess文件。 - 将其重命名(
.htaccess.bak),然后尝试重新生成HTML。 - 如果生成成功,说明问题就在这个文件里,你需要仔细检查其中的规则,或者使用Dede官方推荐的伪静态规则覆盖它。
- 进入网站根目录,找到
第二步:DedeCMS后台设置检查
如果基础检查没有问题,那么问题很可能出在Dede本身的配置上。
检查“核心设置”
进入后台:系统 -> 系统基本参数 -> 核心设置
- 是否开启生成HTML?
- 找到 “
是否使用伪静态” 选项,确保它设置为 “否”,如果你不确定,可以先设为“否”进行测试。 - 找到 “
使用动态页面” 选项,确保它也设为 “否”,目标是让Dede工作在纯静态模式下。
- 找到 “
- 检查目录和命名规则:
- “
栏目目录默认规则” 和 “文章命名规则” 中,确保目录路径是存在的,并且有写入权限(参考第一步)。 - 避免使用过于特殊或包含中文的命名规则,
{typedir}/{Y}-{M}-{D}-{aid}.html是比较稳妥的。
- “
检查“文档关键词维护”
这是一个非常隐蔽的“杀手”功能。

(图片来源网络,侵删)
- 问题所在: 如果你设置了关键词,并关联了一个外部链接,Dede在生成文章时,会尝试将关键词替换为带链接的文本,如果这个外部链接无法访问(比如网站已关闭),生成过程就会卡住或失败,没有任何错误提示。
- 如何检查:
- 进入后台:系统 -> 其他选项 -> 文档关键词维护
- 检查列表中的关键词,特别是“已启用”的状态,尝试暂时禁用所有关键词,然后重新生成HTML,如果成功了,恭喜你,找到问题根源了!
- 逐一启用关键词,测试是哪个关键词导致了问题,然后修改或删除它。
第三步:PHP环境和服务器配置
如果以上步骤都无效,那问题可能出在服务器环境层面。
检查PHP运行模式
-
PHP-Suexec (SuPHP) 模式:
- 在这种模式下,PHP脚本以网站文件的所有者身份运行,而不是以
nobody或apache用户运行。 - 优点: 安全性高,文件权限可以设置为 644。
- 问题: 如果目录权限设置不当(比如是777),PHP-Suexec会拒绝写入,因为它认为777权限不安全。
- 解决方案: 将所有网站目录权限设置为 755,所有文件权限设置为 644,这是PHP-Suexec环境下的标准安全设置。
- 在这种模式下,PHP脚本以网站文件的所有者身份运行,而不是以
-
模块模式 (DSO/Mod_PHP):
- PHP作为Apache的一个模块运行,通常以
nobody或apache用户身份运行。 - 要求: 目录和文件需要有
nobody用户的写入权限。 - 解决方案: 将目录权限设置为 755,文件权限设置为 644,如果目录需要写入,可以临时设置为 777,生成后再改回。
- PHP作为Apache的一个模块运行,通常以
检查PHP执行时间限制
生成大量HTML或复杂页面时,可能会超过PHP默认的30秒执行时间限制,导致生成超时失败。
- 如何检查和修改:
- 在
php.ini文件中找到max_execution_time,将其值改大,300(5分钟)。 - 如果无法修改
php.ini,可以在Dede生成页面的脚本开头(如makehtml_list_action.php)添加一行代码:set_time_limit(0);(表示不限制时间)。
- 在
检查安全软件或防火墙
服务器上的安全软件(如云锁、安全狗)或防火墙规则可能会将Dede的生成操作(写入文件)误判为攻击行为,从而阻止它。
- 如何检查:
- 暂时关闭安全软件,然后尝试生成。
- 查看服务器的安全日志或防火墙日志,看是否有相关拦截记录。
- 如果确定是某个软件拦截,将其加入白名单。
第四步:代码和数据库层面(终极排查)
如果所有常规方法都无效,那可能是更深层次的问题。
检查模板文件
- 模板中是否有错误代码? 检查文章列表页、文章内容页的模板文件(
.htm文件),看是否有语法错误、未闭合的标签或引用了不存在的变量,这些错误有时会导致生成中断。 - 模板中是否有外部资源无法加载? 模板中引用了某个外部的JS或CSS文件,但该文件无法访问,也可能导致生成失败。
清理缓存
- 进入后台:系统 -> SQL命令行工具
- 执行以下SQL语句,清空所有已生成的HTML记录,让Dede重新生成:
DELETE FROM `dede_arctiny`; DELETE FROM `dede_archives`;
警告: 此操作会清空所有文章数据!请务必在操作前备份整个数据库! 更安全的方法是只清空HTML记录表
dede_makehtml。
检查数据库表
- 使用数据库管理工具(如phpMyAdmin)检查Dede的表,特别是
dede_archives(文章表)、dede_arctiny(文章微表)和dede_makehtml(生成记录表)是否存在损坏或字段缺失。
总结与排查流程建议
面对“Dede无法生成静态”的问题,请按照以下流程进行排查:
- 先简后繁:先检查目录权限和磁盘空间,这是最常见的原因。
- 后台设置:检查核心设置中的伪静态开关,并暂时禁用所有关键词。
- 环境配置:确认PHP运行模式(Suexec还是模块),并设置正确的文件权限(755/644)。
- 服务器层面:检查PHP执行时间和安全软件的拦截。
- 终极手段:检查模板代码,或在备份数据库后尝试清空数据表强制重新生成。
希望这份详细的指南能帮助你解决问题!如果按照以上步骤操作后仍然无法解决,请提供更具体的信息,例如你的服务器环境(Linux/Windows)、PHP版本、以及生成时后台是否报错(即使没有提示,也可能有日志),这样可以进一步缩小排查范围。
