- 后台开启伪静态功能
- 修改
include/helpers/channelunit.helper.php文件 (这是最关键的一步,用于处理栏目/目录的链接) - 配置服务器的重写规则 (根据你的服务器类型选择)
第一步:在 DedeCMS 后台开启伪静态
这是所有伪静态设置的基础。

- 登录你的 DedeCMS 后台。
- 进入 系统 -> 系统基本参数。
- 在左侧菜单选择 核心设置。
- 找到 是否使用伪静态 这一选项,将其值设置为 “是”。
- 点击 确定 保存。
第二步:修改 channelunit.helper.php 文件 (核心步骤)
DedeCMS 默认生成的栏目链接是 plus/list.php?tid=1 这样的形式,我们需要修改核心文件,让它直接生成我们想要的目录式链接,如 分类目录/分类名称.html。
这个文件位于 /include/helpers/channelunit.helper.php。
操作方法:
-
使用 FTP 或文件管理器,下载
/include/helpers/channelunit.helper.php文件到你的电脑。 -
用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开它。
-
找到
GetListUrl()函数,这是生成列表页链接的核心函数。 -
找到并替换以下代码:
在文件中搜索类似这样的代码块:
// 旧代码 (大约在第 25-35 行,不同版本行号可能略有差异) if($typeid>0) { $reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid; if($totalpage > 1) { $reurl .= "&totalresult={$totalresult}&PageNo={$PageNo}"; } } else { $reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid; }将其替换为以下代码:
// 新代码 if($typeid>0) { // 获取栏目信息 $typeinfos = GetOneType($typeid); // 获取栏目目录 $typedir = $typeinfos['typedir']; // 处理目录中的特殊字符,确保链接正确 $typedir = preg_replace("/[\/]{1,}/", '/', $typedir); $typedir = str_replace('{cmspath}', '', $typedir); // 拼接最终的URL $reurl = $typedir . ($PageNo > 1 ? '_' . $PageNo : '') . '.html'; // 如果开启了静态化,并且是第一页,则去掉_page_后缀 if($GLOBALS['cfg_rewrite'] == 'Y' && $PageNo == 1) { $reurl = $typedir . '.html'; } } else { $reurl = $GLOBALS['cfg_phpurl']."/list.php?tid=".$typeid; } -
保存并上传 修改后的
channelunit.helper.php文件到你的服务器,覆盖原文件。
代码解释:
- 这段新代码的核心是获取当前栏目的
typedir(栏目目录),然后用这个目录来构建 URL。 {$PageNo}是页码,当有分页时,链接会变成目录_2.html这样的形式。if($GLOBALS['cfg_rewrite'] == 'Y' && $PageNo == 1)这个判断确保了第一页的链接是目录.html,而不是目录_1.html,更加美观。
第三步:配置服务器重写规则
这是告诉服务器如何将一个“不存在”的静态 URL 请求,转发给 DedeCMS 的动态脚本去处理,你需要根据你的服务器类型选择对应的规则。
Apache 服务器
在网站根目录下创建或修改一个名为 .htaccess 的文件。
.htaccess 文件内容:
# 将 RewriteEngine 模式打开
RewriteEngine On
# 如果请求的是一个真实存在的文件或目录,则直接访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# DedeCMS 主页规则
RewriteRule ^index\.html$ /index\.php [L]
# 文章详情页规则 (文章ID.html)
RewriteRule ^([a-z0-9\-]+)\.html$ /plus/view\.php?aid=$1 [L]
# 栏目列表页规则 (栏目目录.html 或 栏目目录_页码.html)
RewriteRule ^([a-z0-9\-]+)_([0-9]+)\.html$ /plus/list\.php?tid=$1&PageNo=$2 [L]
RewriteRule ^([a-z0-9\-]+)\.html$ /plus/list\.php?tid=$1 [L]
# 标签列表页规则
RewriteRule ^tags\.html$ /plus/tags\.php [L]
RewriteRule ^tags/([a-zA-Z0-9\-]+)\.html$ /plus/tags\.php?/$1 [L]
说明:
tid=$1中的$1是指正则表达式([a-z0-9\-]+)匹配到的内容,也就是你的栏目目录名。PageNo=$2匹配的是页码。- 将上面的代码完整复制到
.htaccess文件中,并上传到网站根目录。
Nginx 服务器
修改 Nginx 的配置文件,通常在 nginx.conf 或你网站对应的虚拟主机配置文件中。
在 server 块内添加如下规则:
server {
# ... 其他配置 ...
# 开启重写引擎
rewrite_on;
# DedeCMS 主页规则
rewrite "^/index\.html$" /index.php last;
# 文章详情页规则
rewrite "^/([a-z0-9\-]+)\.html$" /plus/view.php?aid=$1 last;
# 栏目列表页规则
rewrite "^/([a-z0-9\-]+)_([0-9]+)\.html$" /plus/list.php?tid=$1&PageNo=$2 last;
rewrite "^/([a-z0-9\-]+)\.html$" /plus/list.php?tid=$1 last;
# 标签列表页规则
rewrite "^/tags\.html$" /plus/tags.php last;
rewrite "^/tags/([a-zA-Z0-9\-]+)\.html$" /plus/tags.php?/$1 last;
# ... 其他配置 ...
}
说明:
last标识表示完成当前的rewrite规则后,停止处理后续的rewrite规则,并搜索匹配的location。- 修改完 Nginx 配置后,需要执行
nginx -s reload命令来重新加载配置使其生效。
第四步:更新栏目和生成HTML
完成以上所有配置后,你还需要在后台重新生成一下网站,才能让伪静态链接生效。
- 进入 核心 -> 批量更新栏目HTML。
- 勾选所有栏目,点击 开始生成,这一步会更新数据库中的栏目链接格式。
- 进入 生成 -> 一键更新网站,选择“更新所有栏目”和“更新所有文档”,然后开始生成,这一步会根据新的链接规则生成静态页面。
常见问题排查
-
404 Not Found 错误:
- 原因1:服务器重写规则未生效或配置错误,请检查
.htaccess文件(Apache)是否在根目录,或 Nginx 配置是否已正确加载。 - 原因2:栏目目录名中包含特殊字符(如中文、空格),DedeCMS 伪静态对目录名有要求,建议使用英文、数字和短横线 。
- 原因3:栏目在后台的“目录选项”里,目录名为空或使用了
{cmspath}等变量,请确保填写了简单有效的目录名。
- 原因1:服务器重写规则未生效或配置错误,请检查
-
链接还是动态的 (
plus/list.php?tid=...):- 原因:
channelunit.helper.php文件修改不成功或路径错误,请务必确认文件已正确覆盖,并且代码修改无误。
- 原因:
-
分页链接错误:
- 原因:检查
.htaccess或 Nginx 规则中的分页正则表达式是否正确,以及channelunit.helper.php中是否正确拼接了{$PageNo}。
- 原因:检查
通过以上四个步骤,你就可以成功地为 DedeCMS 配置好目录形式的伪静态了,整个过程最核心的就是 第二步修改 channelunit.helper.php,它决定了你链接的“骨架”。
