这通常被称为“拼音 tag 伪静态”,它能将类似 tags.php?/web/develop 这样的动态链接,美化成 /tags/web-develop.html 这样的形式,对搜索引擎更友好,也更美观。

实现这个功能主要分为两大步:
- 修改核心文件:让 DedeCMS 在保存和读取 tag 时,自动处理拼音。
- 配置伪静态规则:让 Web 服务器(如 Apache 或 Nginx)将拼音链接正确地转发给
tags.php。
第一步:修改核心文件(处理拼音)
这一步的目的是让系统在后台添加或修改 tag 时,自动生成对应的拼音别名,我们以一个流行的 DedeCMS 拼音类为例。
准备拼音处理类文件
你需要一个 PHP 类来处理汉字转拼音,最常用的是 Pinyin.php 文件。
- 下载地址:你可以在网上搜索 "dedecms pinyin.php" 或 "pinyin.class.php" 找到现成的文件,一个可靠的来源是 GitHub 或一些 DedeCMS 技术论坛。
- 存放位置:将下载的
Pinyin.php文件上传到你的 DedeCMS 根目录下的/include/文件夹中。
修改 tag_add.php 文件(添加 tag 时生成拼音)
这个文件负责处理后台添加新 tag 的请求。

-
文件路径:
/dede/tag_add.php -
修改方法:
- 找到文件开头的
require_once(dirname(__FILE__)."/config.php");这一行。 - 在它后面,添加以下代码来引入拼音类:
// 引入拼音处理类 require_once(DEDEINC.'/Pinyin.php');
- 找到处理表单数据的代码段,通常在
if($dopost=='save')内部,你会看到类似$tag = trim($tag);的行。 - 在
$tag = trim($tag);这行后面,添加以下代码来生成拼音并更新tag变量:
// 生成拼音别名 $pinyin = new Pinyin(); $py = $pinyin->output($tag, '', false); // 第三个参数 false 表示不生成带音调的拼音 $tag = $tag; // 原始tag名称 $tag = $py; // 使用拼音作为tag值,这是关键! // 注意:如果你想保留原始名称,同时使用拼音作为URL,你需要修改数据库结构。 // 但最简单直接的方法就是用拼音覆盖tag字段,因为tag字段在URL中就是标识。
重要提示:上面的代码直接用拼音覆盖了原始的
$tag变量,这意味着你的tag表里的tag字段存储的就是拼音了(如web-develop),如果你的tag表里同时有tagname字段存储原始名称,那么你需要修改逻辑,将拼音存入另一个字段或用于URL构建,对于标准DedeCMS,直接覆盖是最简单有效的方式。 - 找到文件开头的
修改 tag.php 文件(读取拼音 tag)
这个文件负责在前台展示 tag 页面,我们需要修改它,使其能接收拼音参数并查询对应的 tag。
-
文件路径:
/tags.php -
修改方法:
- 找到文件开头的
require_once(dirname(__FILE__)."/config.php");。 - 在它后面,引入拼音类(如果还没有引入的话):
// 引入拼音处理类 require_once(DEDEINC.'/Pinyin.php');
- 找到获取 tag 名称的核心代码,通常类似
if($tag == '') exit();和$tag = FilterSearch(urldecode($tag));。 - 在
if($tag == '') exit();之后,添加以下代码:
// 如果传入的是拼音,则根据拼音查找tag $pinyin = new Pinyin(); if (preg_match('/^[a-z0-9\-]+$/i', $tag)) { // 判断是否是纯字母、数字和横线,即拼音格式 $row = $dsql->GetOne("SELECT tag FROM `#@__tag` WHERE tag = '{$tag}' "); if (!is_array($row)) { // 如果拼音找不到,尝试将拼音转回汉字查找(容错处理,可选) $chinese = $pinyin->output($tag, ' ', true); $row = $dsql->GetOne("SELECT tag FROM `#@__tag` WHERE tag LIKE '%{$chinese}%' "); if (!is_array($row)) { ShowMsg('您指定的标签不存在!', '-1'); exit(); } } // $tag 变量已经是拼音了,无需修改 } else { // 如果传入的是汉字,则将其转为拼音(兼容旧链接) $tag = $pinyin->output($tag, '', false); }这段代码的作用是:当访问
/tags/web-develop.html时,它会判断web-develop是拼音格式,然后直接去数据库里查找tag字段为web-develop的记录。 - 找到文件开头的
第二步:配置伪静态规则
修改完核心文件后,你需要告诉 Web 服务器如何将形如 /tags/web-develop.html 的请求,真实地交给 /tags.php 来处理。
Apache 服务器
-
确保你的 Apache 开启了
mod_rewrite模块,大多数虚拟主机都已开启。 -
在你的 DedeCMS 根目录下,找到或创建一个名为
.htaccess的文件。 -
将以下规则添加到
.htaccess文件中(如果文件中已有其他规则,请将其追加或合并):<IfModule mod_rewrite.c> RewriteEngine On # 将 /tags/拼音.html 的请求转发到 /tags.php RewriteRule ^tags/([a-zA-Z0-9\-]+)\.html$ /tags.php?/$1 [L] # DedeCMS 默认的一些伪静态规则,如果你的网站已经配置,请保留 RewriteRule ^index\.html$ /index.php [L] # ... 其他规则 ... </IfModule>
规则解释:
RewriteEngine On:开启伪静态引擎。RewriteRule ^tags/([a-zA-Z0-9\-]+)\.html$ /tags.php?/$1 [L]:这是核心规则。^tags/:匹配以/tags/开头的 URL。([a-zA-Z0-9\-]+):捕获一个或多个字母、数字、横线(这就是你的拼音 tag),并存储在$1中。\.html$:匹配以.html结尾的 URL。/tags.php?/$1:将请求重写到/tags.php/后面跟上捕获到的拼音,注意/$1前面的问号 是为了将参数附加到查询字符串中,这与我们修改的tag.php文件中的$_SERVER['PATH_INFO']或$_SERVER['QUERY_STRING']配合使用。
Nginx 服务器
-
登录你的 Nginx 服务器,找到网站的配置文件,通常在
/etc/nginx/sites-available/目录下。 -
在
server块中,添加以下rewrite规则:server { # ... 其他配置如 listen, server_name, root ... # DedeCMS tags 伪静态规则 rewrite "^/tags/([a-zA-Z0-9\-]+)\.html$" /tags.php?/$1 last; # DedeCMS 默认的一些伪静态规则 rewrite "^/index\.html$" /index.php last; # ... 其他规则 ... # ... 其他 location 配置 ... }规则解释:
rewrite "^/tags/([a-zA-Z0-9\-]+)\.html$" /tags.php?/$1 last;:与 Apache 类似。^/tags/([a-zA-Z0-9\-]+)\.html$:匹配 URL 模式。/tags.php?/$1:重写目标。last:停止处理 rewrite 检查,并使用新的 URI 进行内部查找。
-
保存配置文件后,执行
nginx -s reload命令重新加载 Nginx 配置。
第三步:修改模板链接(可选但推荐)
为了确保网站内所有的 tag 链接都生成新的拼音格式,你可能需要修改模板文件。
-
默认模板:通常在
/templets/default/目录下。 -
查找文件:找到包含 tag 循环的文件,可能是
list_article.htm、index.htm或其他相关模板。 -
定位代码:找到类似
{dede:tag row='10' getall='0'}的标签。 -
修改链接:在这个标签内部,找到
<a href='[field:tagurl/]'>这样的链接代码。 -
修改为拼音格式:将
[field:tagurl/]替换为我们手动构建的拼音链接,因为此时 tag 字段本身已经是拼音了,所以可以这样修改:{dede:tag row='10' getall='0'} <a href='/tags/[field:tag/].html'>[field:tag/]</a> {/dede:tag}注意:这种直接输出
[field:tag/]的方法,只有在第一步中我们用拼音覆盖了原始 tag 名称后才有效,如果你的tag表里同时有拼音和汉字字段,你需要修改调用标签。
总结与排错
- 检查文件权限:确保你修改的 PHP 文件和
.htaccess文件有正确的读写权限。 - 清除缓存:修改完文件后,务必在 DedeCMS 后台清除所有缓存(系统 -> 站点缓存 -> 清除)。
- 测试:
- 在后台添加一个新 tag,织梦CMS”,检查数据库里
tag字段是否变成了拼音(如zhi-meng-cms)。 - 前台访问
http://你的域名/tags/zhi-meng-cms.html,看是否能正常显示 tag 页面。 - 检查其他地方的 tag 链接是否也变成了拼音格式。
- 在后台添加一个新 tag,织梦CMS”,检查数据库里
- 常见问题:
- 404 Not Found:伪静态规则没生效,检查
.htaccess是否在根目录,规则语法是否正确,或 Nginx 配置是否已重载。 - 页面空白或报错:PHP 代码修改有误,检查
Pinyin.php文件是否上传正确,PHP 语法是否有错误。 - 找不到标签:可能是数据库里没有对应的拼音记录,或者
tag.php里的查询逻辑有问题。
- 404 Not Found:伪静态规则没生效,检查
通过以上步骤,你就可以成功地为 DedeCMS 配置基于拼音的 tag 伪静态了。
