Tag 标签伪静态是 DedeCMS 优化中非常重要的一步,它可以将类似 tags.php?/关键词/ 这样的动态链接,转换为更美观、更利于搜索引擎抓取和用户分享的静态链接格式,tags/关键词.html 或 tags/关键词/。

下面我将提供两种最主流、最稳定的方法,并附上详细的步骤和注意事项。
使用 DedeCMS 自带的“伪静态”功能(推荐,最简单)
这是 DedeCMS 系统内置的功能,利用服务器上的 rewrite 规则来实现,无需修改核心程序文件,是首选方法。
第 1 步:开启后台的“使用伪静态”
- 登录您的 DedeCMS 后台。
- 进入 系统 -> 系统基本参数。
- 在左侧菜单选择 核心设置。
- 找到 是否使用伪静态 这一项,将其值修改为 “是”。
- 点击 “保存更改”。
第 2 步:配置服务器的 Rewrite 规则
这一步是关键,不同的 Web 服务器(如 Apache, Nginx)配置方法不同,您需要根据您的服务器环境选择对应的配置文件并添加规则。
重要提示:修改服务器配置文件前,务必先备份原文件,以防配置错误导致网站无法访问。

Apache 服务器配置
Apache 服务器通常使用 .htaccess 文件来管理 Rewrite 规则。
- 检查根目录下是否存在
.htaccess文件,如果不存在,请创建一个。 - 编辑
.htaccess文件,将以下规则添加到文件中,如果文件中已有RewriteEngine On,则只需添加RewriteRule部分。
# 将 RewriteEngine 开启
RewriteEngine On
# 如果请求的文件或目录真实存在,则直接访问,不进行重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# DedeCMS 主站伪静态规则 (如果已有,请保留)
RewriteRule ^index\.html$ index\.php [L]
# DedeCMS 文章列表、文章内容页伪静态规则 (如果已有,请保留)
RewriteRule ^category/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ index\.php?action=list&classid=$1&mid=$2&tempid=$3 [L]
RewriteRule ^category/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ index\.php?action=list&classid=$1&mid=$2 [L]
RewriteRule ^category/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ index\.php?action=article&classid=$1&mid=$2&aid=$3 [L]
RewriteRule ^category/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ index\.php?action=article&classid=$1&mid=$2&aid=$3 [L]
# ------------------- 以下是 Tag 标签伪静态规则 -------------------
# 将 /tags.php?/关键词/ 格式重写为 /tags/关键词.html
RewriteRule ^tags/([^/]+)\.html$ tags\.php\?\/$1\/ [L]
# ------------------- Tag 标签伪静态规则结束 -------------------
规则解释:
RewriteRule ^tags/([^/]+)\.html$ tags\.php\?\/$1\/ [L]
^tags/([^/]+)\.html$:匹配用户请求的 URL 格式,以tags/开头,中间是任意非 的字符(([^/]+)),最后是.html。tags\.php\?\/$1\/:将其重写为服务器实际执行的动态脚本。$1代表匹配到的“关键词”部分。[L]:表示如果这条规则匹配成功,则停止后续的 Rewrite 规则。
Nginx 服务器配置
Nginx 服务器通常在虚拟主机配置文件(如 nginx.conf 或站点配置文件)中添加 rewrite 规则。
- 找到您的网站配置文件。
- 在
server块中添加以下规则:
# ------------------- 以下是 Tag 标签伪静态规则 ------------------- # 将 /tags/关键词.html 格式重写为 /tags.php?/关键词/ rewrite "^/tags/([^/]+)\.html$" /tags.php?/$1/ last; # ------------------- Tag 标签伪静态规则结束 -------------------
规则解释:
rewrite "^/tags/([^/]+)\.html$" /tags.php?/$1/ last;

^/tags/([^/]+)\.html$:匹配用户请求的 URL 格式,与 Apache 类似。/tags.php?/$1/:将其重写为服务器实际执行的动态脚本。last:表示停止处理当前的rewrite规则,并搜索与重写后的 URL 匹配的 location。
第 3 步:更新缓存并测试
- 在 DedeCMS 后台,进入 系统 -> 一键更新网站 -> 更新缓存,执行缓存更新。
- 访问您的网站,点击任意一个 tag 标签,查看浏览器地址栏的链接是否已经变成了
tags/关键词.html的格式。 - 如果页面正常显示,说明伪静态化成功。
修改 tags.php 文件(备用方法)
如果方法一因为服务器权限或环境问题无法实现,可以使用这个方法,它的原理是直接修改 tags.php 文件,让它能够识别和处理静态格式的 URL。
第 1 步:备份原文件
在修改任何核心文件之前,请务必备份 根目录/tags.php 文件。
第 2 步:编辑 tags.php 文件
用文本编辑器(如 Notepad++, VS Code)打开 根目录/tags.php 文件。
找到类似下面的代码段(通常在文件的开头部分):
// 检测Tag别名
if(isset($_GET['tagname']))
{
$tagid = GetTagID($tagname);
if($tagid > 0)
{
$tags = GetTags($tagid);
$tagname = $tags['tagname'];
}
else
{
$tags = '';
include(DEDETEMPLATE.'/error.htm');
exit();
}
}
将其替换为以下代码:
// 检测Tag别名 (支持伪静态URL /tags/关键词.html)
$tagname = '';
if(isset($_GET['tagname'])) {
// 处理动态URL tags.php?/关键词/
$tagname = $_GET['tagname'];
} else if (isset($_SERVER['PATH_INFO'])) {
// 处理伪静态URL /tags/关键词.html
$path_info = trim($_SERVER['PATH_INFO'], '/');
// 匹配 /tags/关键词.html 格式
if (preg_match('~^tags/([^/]+)\.html$~', $path_info, $matches)) {
$tagname = $matches[1];
}
}
if($tagname != '')
{
$tagid = GetTagID($tagname);
if($tagid > 0)
{
$tags = GetTags($tagid);
$tagname = $tags['tagname'];
}
else
{
$tags = '';
include(DEDETEMPLATE.'/error.htm');
exit();
}
}
代码解释:
这段新增的代码会首先检查是否存在 PATH_INFO 变量(这是伪静态URL传递过来的信息),如果存在,就通过正则表达式 ~^tags/([^/]+)\.html$~ 来提取出关键词部分,并将其赋值给 $tagname 变量,后续的逻辑保持不变,从而实现了对静态URL的支持。
第 3 步:创建或修改 .htaccess / nginx.conf 文件
即使修改了 PHP 文件,你仍然需要一个 301 重定向,将 tags.php?/关键词/ 的旧链接永久重定向到新的 tags/关键词.html 格式,这有利于 SEO。
- Apache (
.htaccess): 在.htaccess文件中添加:RewriteCond %{QUERY_STRING} ^\/(.*)\/$ RewriteRule ^tags\.php$ tags/%1.html? [R=301,L] - Nginx (
nginx.conf): 在server块中添加:if ($args ~* "^\/(.*)\/$") { rewrite ^/tags\.php$ /tags/$1.html? permanent; }
常见问题与注意事项
-
404 Not Found 错误:
- 原因:通常是服务器 Rewrite 规则配置错误或未生效。
- 解决:
- 检查规则:仔细核对
.htaccess或nginx.conf中的规则是否与上文提供的完全一致。 - 检查模块:确保 Apache 的
mod_rewrite模块已启用,Nginx 的rewrite模块已编译。 - 检查权限:确保
.htaccess文件在 Apache 服务器下有正确的执行权限。 - 重启服务:修改 Nginx 配置后,需要执行
nginx -s reload命令使配置生效。
- 检查规则:仔细核对
-
显示正常,但链接还是动态的:
- 原因:只修改了服务器规则,但页面里的标签链接没有被更新。
- 解决:这通常是因为模板文件(如
list_article.htm)中的标签调用方式没有使用GetTagUrl函数,DedeCMS 默认的标签调用代码是<a href='[field:tagurl/]'>[field:tagname/]</a>,这里的[field:tagurl/]会根据后台的“是否使用伪静态”设置自动生成对应的链接,如果后台设置已开启,但链接还是动态的,请检查模板文件是否被修改过。
-
选择哪种方法?
- 优先选择方法一,它是 DedeCMS 官方推荐的方式,不修改核心文件,更安全,升级系统时不会被覆盖。
- 方法二 作为备用方案,当你的服务器环境非常特殊,无法使用方法一时使用。
希望这份详细的指南能帮助您成功实现 DedeCMS tag 标签的伪静态化!
