织梦的标签默认是动态链接,格式类似于 tags.php?/标签名/,通过伪静态,我们可以将其转换为更美观、更利于SEO的静态链接格式,tags/标签名.html 或 tag/标签名.html。

(图片来源网络,侵删)
实现伪静态主要分为两大步:
- 修改织梦程序文件:让织梦生成静态规则的URL。
- 配置Web服务器:将带有特定规则的URL请求,真实地映射到织梦的动态文件上。
第一步:修改织梦程序文件
这一步的目的是让织梦在生成标签链接时,使用我们想要的静态格式。
修改 arc.taglist.class.php 文件
这个文件是处理标签列表页的核心文件,我们需要修改它,让它生成 tags/标签名.html 这样的链接。
文件路径:/include/arc.taglist.class.php

(图片来源网络,侵删)
操作步骤:
- 用编辑器打开
arc.taglist.class.php文件。 - 找到
GetTagUrl()这个函数(通常在文件的后半部分)。 - 将这个函数内部的代码替换为以下代码:
/**
* 获取标签链接
*
* @param string $tagid 标签ID
* @param string $tagname 标签名
* @return string 标签链接
*/
function GetTagUrl($tagid, $tagname = '')
{
if ($tagname == '') {
$tagname = $this->TagInfos['tagname'];
}
// --- 核心修改部分开始 ---
// 获取站点根目录
$murl = $GLOBALS['cfg_basehost'];
// 设置标签链接伪静态规则,格式为 /tags/标签名.html
// 你也可以改成 /tag/标签名.html,只需修改下面的 'tags' 即可
$tagurl = $murl . '/tags/' . urlencode($tagname) . '.html';
// --- 核心修改部分结束 ---
return $tagurl;
}
代码解释:
- 我们不再使用织梦默认的
MakeTag()函数来生成URL。 - 直接拼接出我们想要的静态URL格式:
站点域名 + /tags/ + URL编码的标签名 + .html。 urlencode($tagname)是为了处理标签名中包含中文或特殊字符的情况,确保URL的合法性。
修改 taglib_taglist.lib.php 文件(可选)
这个文件是用于在模板中调用 {dede:tag} 标签库的,如果你希望直接在模板中使用 {dede:tag} 来获取标签的静态链接,也需要修改这个文件。
文件路径:/include/taglib/taglist.lib.php

(图片来源网络,侵删)
操作步骤:
- 打开
taglib_taglist.lib.php文件。 - 找到
function GetTags($refObj, $cquery)函数。 - 在函数内,找到生成URL的代码,通常是一个
return语句,包含MakeTag()。 - 将其修改为使用我们上面定义的
GetTagUrl()函数。
修改前(大概样子):
// ... $row['link'] = $GLOBALS['cfg_cmsurl']."/tags.php?/".urlencode($row['tagname'])."/"; // ...
修改后:
// ... // 引入arc.taglist.class.php中的GetTagUrl方法 // 需要先实例化一个TagArchives对象,或者直接调用 // 这里为了方便,直接调用函数 require_once(DEDEINC."/arc.taglist.class.php"); $arcTag = new TagArchives(); $row['link'] = $arcTag->GetTagUrl($row['id'], $row['tagname']); // ...
注意:这个修改有时不是必须的,因为通常标签列表页的链接是通过
{dede:taglist/}生成的,而这个标签会调用arc.taglist.class.php,但如果你有自定义需求,比如在文章内容页调用相关标签,这个修改就很有用。
第二步:配置Web服务器
修改完织梦程序后,它已经会生成 tags/标签名.html 这样的静态URL了,但服务器本身不认识这种格式,它会直接返回404错误,所以我们需要配置服务器,让它将这种请求“伪装”成 tags.php 来处理。
Apache服务器
这是最常见的情况,通过 .htaccess 文件配置。
- 确保你的网站根目录下有
.htaccess文件,如果没有,请创建一个。 - 将以下代码添加到
.htaccess文件中:
# 确保开启了 mod_rewrite 模块 RewriteEngine On # 如果你的标签目录不是根目录,需要先排除其他目录 # 如果网站在 /cms/ 目录下,需要加上 RewriteBase /cms/ # 标签伪静态规则 # 将 /tags/标签名.html 的请求,交给 tags.php 处理 # [NC] 表示不区分大小写 # [L] 表示如果这条规则匹配,则停止处理后续的Rewrite规则 RewriteRule ^tags/(.*).html$ tags.php?/$1 [NC,L] # 如果你的网站启用了二级目录,并且规则冲突,可以更精确地匹配 # 如果你的标签页是 /article/tags/xxx.html # RewriteRule ^article/tags/(.*).html$ tags.php?/$1 [NC,L]
代码解释:
RewriteEngine On:开启URL重写引擎。RewriteRule:核心重写规则。^tags/(.*).html$:匹配URL的模式。^表示开头, 表示结尾, 是一个捕获组,匹配tags/和.html之间的所有内容。tags.php?/$1:将匹配到的URL重写到这个地址。$1代表第一个捕获组的内容(即标签名)。 是织梦动态标签的标准参数格式。[NC,L]:是标志位,NC(No Case) 不区分大小写,L(Last) 最后一条规则。
Nginx服务器
如果你使用的是Nginx,需要修改Nginx的配置文件(通常是 nginx.conf 或你网站对应的配置文件)。
- 找到你的
server配置块。 - 在
location块中添加以下规则:
# 在 server { ... } 块内添加
# 标签伪静态规则
location ~* ^tags/(.*)\.html$ {
# 将请求转发到后端的织梦 tags.php
# $1 是捕获的标签名
# ?/ 是织梦需要的参数格式
rewrite ^/tags/(.*)\.html$ /tags.php?/$1 last;
}
# 如果你的网站有二级目录,/cms/
# location ~* ^/cms/tags/(.*)\.html$ {
# rewrite ^/cms/tags/(.*)\.html$ /cms/tags.php?/$1 last;
# }
代码解释:
location ~* ^tags/(.*)\.html$:匹配URL, 表示不区分大小写的正则表达式匹配。rewrite:执行重写指令。^/tags/(.*)\.html$:匹配的URL模式。/tags.php?/$1:重写后的目标。last:表示在本条规则匹配完成后,停止匹配并查找对应的location块来处理请求。
第三步:更新缓存和测试
- 更新缓存:登录织梦后台,点击“系统” -> “更新缓存”,确保所有生成的链接都使用了新的规则。
- 更新栏目和文档HTML:为了确保所有内链都正确,建议去“更新主页HTML”、“更新栏目HTML”和“更新文档HTML”里执行一次全站更新。
- 测试:
- 在网站前台点击任何一个标签链接,检查是否能正常跳转到标签列表页。
- 观察浏览器地址栏的URL是否已经变成了
tags/标签名.html的格式。 - 如果出现404错误,请仔细检查
.htaccess或nginx.conf的配置是否正确,特别是语法和路径。
常见问题排查
- 404错误:
- 原因1:伪静态规则未生效或写错,请检查
.htaccess文件是否在网站根目录,以及规则语法是否正确,对于Nginx,确保配置已重新加载。 - 原因2:
tags.php文件不存在或无权限访问,检查文件是否在根目录。
- 原因1:伪静态规则未生效或写错,请检查
- 500错误:
- 原因:
.htaccess文件语法错误,检查是否有拼写错误或括号不匹配。
- 原因:
- URL还是动态的:
- 原因:程序修改未生效,请检查
arc.taglist.class.php文件是否已成功保存,并确保更新了网站缓存。
- 原因:程序修改未生效,请检查
通过以上三个步骤,你就可以成功地为织梦CMS的标签功能实现伪静态了,这不仅提升了网站的美观度,对搜索引擎优化(SEO)也非常有帮助。
