问题核心原因简述
DedeCMS为了实现更美观、更利于SEO的URL(将 article.php?id=123 变成 /article/123.html),使用了URL重写技术,这个过程需要服务器的支持,当你安装新模板时,模板文件中通常会包含或更新了.htaccess文件,这个文件里定义了重写规则,如果服务器没有正确启用或解析这些规则,访问这些“美化”后的链接时,服务器就找不到对应的页面,从而返回404错误。

解决方案(按优先级顺序排查)
第1步:检查并启用伪静态(URL重写)
这是90%的情况下导致404的原因,DedeCMS官方提供了多种服务器的伪静态规则,你需要根据你的服务器环境选择正确的规则并启用它。
找到并上传正确的.htaccess文件
- 位置:在你的DedeCMS网站根目录下(即与
index.php,dede文件夹同级的目录)。 - 检查:检查这个目录下是否存在一个名为
.htaccess的文件。- 如果不存在:你需要从DedeCMS的安装包里找到它,通常在
/data/目录下会有一个名为htaccess.txt的文件,将它重命名为.htaccess,然后上传到网站根目录。 - 如果已存在:用FTP工具或服务器的文件管理器打开它,检查里面的内容是否与你使用的服务器环境匹配。
- 如果不存在:你需要从DedeCMS的安装包里找到它,通常在
根据服务器环境修改.htaccess
以下是针对不同服务器的标准伪静态规则,请用以下内容覆盖你根目录下的.htaccess文件。

A. Apache服务器(最常见)
如果你的网站使用的是虚拟主机或云服务器(如阿里云、腾讯云)的Linux系统,大概率是Apache服务器,请使用以下规则:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^index\.html$ /index.php [L] RewriteRule ^list-([0-9]+)\.html$ /plus/list.php?tid=$1 [L] RewriteRule ^list-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /plus/list.php?tid=$1&totalresult=$2&PageNo=$3 [L] RewriteRule ^view-([0-9]+)-([0-9]+)\.html$ /plus/view.php?arcID=$1&pageno=$2 [L] RewriteRule ^view-([0-9]+)\.html$ /plus/view.php?arcID=$1 [L] RewriteRule ^tag-(.*)\.html$ /plus/search.php?keyword=$1 [L] </IfModule>
关键点:确保你的服务器开启了 mod_rewrite 模块,绝大多数虚拟主机都已开启,如果你有服务器管理权限,可以在 httpd.conf 配置文件中检查并取消 LoadModule rewrite_module modules/mod_rewrite.so 前面的 号。
B. Nginx服务器

如果你使用的是Nginx(常见于云服务器),你需要修改Nginx的配置文件(通常是 nginx.conf 或站点配置文件),在 server 块内添加以下规则:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
修改完配置文件后,务必重启Nginx服务,让配置生效。
C. IIS服务器(Windows系统)
如果你使用的是Windows系统的IIS服务器,你需要安装一个“ISAPI Rewrite”组件,然后根目录下的 httpd.ini 文件内容如下:
[ISAPI_Rewrite] # 3600 = 1 hour CacheClockRate 3600 RepeatLimit 32 RewriteRule ^(.*)/index\.html $1/index\.php [L] RewriteRule ^(.*)/plus/list-([0-9]+)\.html $1/plus/list\.php\?tid=$2 [L] RewriteRule ^(.*)/plus/list-([0-9]+)-([0-9]+)-([0-9]+)\.html $1/plus/list\.php\?tid=$2&TotalResult=$3&PageNo=$4 [L] RewriteRule ^(.*)/plus/view-([0-9]+)-([0-9]+)\.html $1/plus/view\.php\?arcID=$2&pageno=$3 [L] RewriteRule ^(.*)/plus/view-([0-9]+)\.html $1/plus/view\.php\?arcID=$2 [L]
第2步:检查DedeCMS后台设置
即使.htaccess文件正确,后台的开关也必须打开。
- 登录你的DedeCMS后台。
- 进入 “系统” -> “系统基本参数”。
- 在左侧菜单找到 “核心设置”。
- 找到以下两项,确保它们的值是 “是”:
- 是否使用伪静态:是
- 是否为目录默认主页:是 (此项有助于SEO,但非必须)
- 保存设置。
第3步:检查文件权限
新上传的模板文件或.htaccess文件的权限不正确,导致服务器无法读取。
- FTP工具设置:使用你的FTP软件(如FileZilla)连接服务器,进入网站根目录。
- 设置权限:右键点击
.htaccess文件,选择“文件权限”(或类似选项)。 - 数值:将其权限设置为
644。 - 目录权限:确保
dede、data、uploads、templets等关键目录的权限设置为755。
第4步:检查模板文件本身(较少见)
如果以上方法都无效,可能是模板文件本身有问题。
- 检查
index.php:用代码编辑器打开网站根目录的index.php文件,确保它没有被修改或损坏,默认内容应该是:<?php if(!file_exists(dirname(__FILE__).'/data/common.inc.php')) { header('Location:install/index.php'); exit(); } require_once (dirname(__FILE__) . "/include/common.inc.php"); require_once DEDEINC."/arc.partview.class.php"; $GLOBALS['_arclistEnv'] = 'index'; $row = $dsql->GetOne("Select * From `dede_homepageset`"); $row['templet'] = MfTemplet($row['templet']); $pv = new PartView(); $pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']); $pv->Display(); ?> - 检查模板覆盖:如果你是用模板文件覆盖了旧模板,请确保没有覆盖掉核心的PHP文件(如上面提到的
index.php),通常只覆盖/templets/目录下的文件和.htaccess。
第5步:清除浏览器缓存和CDN缓存
你已经在本地解决了问题,但浏览器或CDN还缓存着旧的404页面。
- 浏览器:按
Ctrl + F5强制刷新页面,或使用浏览器的“无痕/隐私模式”访问。 - CDN:如果你使用了阿里云、腾讯云、Cloudflare等CDN服务,请登录CDN控制台,找到你的域名,选择“刷新预热”,刷新URL和目录。
总结排查流程
遇到 "Not Found" 错误,请按以下顺序操作:
- 检查根目录的
.htaccess文件是否存在,内容是否正确(根据服务器环境选择Apache/Nginx/IIS规则)。 - 登录DedeCMS后台,检查“系统基本参数” -> “核心设置” -> “是否使用伪静态”是否为“是”。
- 使用FTP工具,将
.htaccess文件权限设置为644,关键目录权限设置为755。 - 清除浏览器缓存(Ctrl+F5),如果用了CDN也一并刷新。
- 如果以上都无效,再检查模板文件是否损坏或错误地覆盖了核心文件。
按照这个流程,99%的404问题都能得到解决,如果问题依旧,请提供你的服务器环境(Apache/Nginx/IIS)和错误截图,以便进一步分析。
