这是一个非常常见的需求,因为默认情况下,tag列表页和tag内容页都是动态的(.php),不利于SEO优化和网站速度提升。

实现 tag 静态化主要分为三个步骤:
- 后台开启伪静态:这是基础,告诉服务器如何将URL重写为静态形式。
- 修改程序文件:让织梦程序支持生成静态的HTML文件。
- 更新和生成:更新相关缓存,并重新生成 tag 页面。
第一步:后台开启伪静态
在修改任何代码之前,请务必先在织梦后台开启伪静态功能。
- 登录织梦后台。
- 进入【系统】 -> 【系统基本参数】。
- 在左侧菜单选择【核心设置】。
- 找到 “是否使用伪静态” 这一项,将其值修改为 “是”。
- 点击【保存】。
注意:开启伪静态后,你的服务器必须已经配置好了对应的伪静态规则,如果你用的是虚拟主机,通常主机商会提供规则;如果是自己配置的服务器(如Nginx, Apache),需要手动添加规则。
织梦 Tag 伪静态规则参考:

-
Nginx 规则 (将此代码添加到你的nginx.conf的server段中)
rewrite "^/tags\.html$" /tags.php last; rewrite "^/tags/([a-zA-Z0-9_-]+)/\.html$" /tags.php?/$1 last; rewrite "^/tags/([a-zA-Z0-9_-]+)/([0-9]+)\.html$" /tags.php?/$1/$2 last;
-
Apache 规则 (将此代码保存为
.htaccess文件并上传到网站根目录)<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^tags\.html$ tags.php RewriteRule ^tags/([a-zA-Z0-9_-]+)/\.html$ tags.php?/$1 RewriteRule ^tags/([a-zA-Z0-9_-]+)/([0-9]+)\.html$ tags.php?/$1/$2 </IfModule>
第二步:修改程序文件(核心步骤)
织梦默认不直接支持tag的静态化生成,需要我们手动修改两个文件来开启这个功能。
修改 tag.lib.php 文件
这个文件是负责调用和显示tag列表页的。
-
文件路径:
/include/taglib/tag.lib.php -
修改方法: 找到文件中的
GetTagList函数,找到大约在第 108行 的return $tags;语句。在这行代码的上面,添加一行新的代码。修改前 (代码片段):
// ... 其他代码 ... $tags[] = $row; } } return $tags;
修改后 (代码片段):
// ... 其他代码 ... $tags[] = $row; } } // ====== 以下为新增代码,用于开启tag静态化 ====== // 检查系统是否开启了静态化 if($type=='son' && $isdefault==1 && $innertext!='' && $CTags->GetAtt('rel')=='') { $tagsql = "SELECT count(*) FROM `dede_taglist` WHERE tag like '".$row['tagname']."'"; $row['count'] = $dsql->GetOne($tagsql); $row['link'] = GetTagUrl($row['tagname'], $row['id'], $row['count']); } // =========================================== return $tags;说明:这段新增的代码,会检查系统设置,如果开启了静态化,它就会调用
GetTagUrl函数来生成一个静态的链接地址,而不是动态的tags.php?。
修改 arc.taglist.class.php 文件
这个文件是处理 tag 列表页逻辑的核心类,我们需要修改它,让它支持生成HTML文件。
-
文件路径:
/include/arc.taglist.class.php -
修改方法: 这个文件修改点比较多,请仔细操作。
A. 修改
MakeHtml()方法 (约在第 280 行)找到
function MakeHtml(),找到里面类似这样的代码:$this->dtp->SaveToHtml($this->GetTempletFile());
将其替换为:
// 获取模板文件 $tempfile = $this->GetTempletFile(); // 生成静态文件 $this->dtp->SaveToHtml($this->GetTruePath().$this->TagPageName); // 生成成功后,重定向到静态页面 if($this->MakeHtml == 1) { header("Location: {$this->NameFirst}".$this->TagPageName); exit(); }B. 修改
GetTruePath()方法 (约在第 150 行)找到
function GetTruePath(),将整个函数内容替换为:function GetTruePath() { $mlink = ''; if($this->TypeID>0) { $mlink = GetFileUrl($this->TypeID,'',0,false,''; } $murl = $mlink == '' ? $this->GetArcUrl($this->TagInfo['id']) : $mlink; $murl = preg_replace("#\/$#", "", $murl); return $murl.'/'; }C. 修改
GetTagUrl()方法 (约在第 400 行)找到
function GetTagUrl(),这是生成tag链接的核心,找到类似$reurl = $cfg_cmspath.'/tags.php?';的代码,并将其替换为:// 如果开启静态化,则生成静态链接 if($this->MakeHtml == 1) { $reurl = $GLOBALS['cfg_phpurl'].'/tags/'; if($geturl!='') $reurl .= $geturl.'/'; $reurl .= $this->TagInfo['tagname'].'.html'; } else // 否则生成动态链接 { $reurl = $GLOBALS['cfg_phpurl'].'/tags.php?/'.$geturl; } return $reurl;注意:
$geturl变量可能在不同版本的织梦中名称略有不同,但逻辑是一样的,确保if($this->MakeHtml == 1)这个判断存在即可。
第三步:更新缓存与生成页面
文件修改完成后,需要让织梦识别这些改动。
-
更新系统缓存:
- 进入后台【系统】 -> 【一键更新网站】。
- 在左侧菜单选择 【更新系统缓存】,然后点击【开始执行】。
- 这一步至关重要,能确保织梦加载你修改的新逻辑。
-
生成 tag 页面:
- 进入后台【核心】 -> 【批量生成HTML】。
- 在左侧菜单选择 【更新Tags】。
- 你可以选择“更新所有Tags”或者指定更新,点击【开始生成】。
- 程序会根据你现有的所有tag,逐一生成对应的静态HTML文件,
tags/织梦CMS.html、tags/网站建设.html等。
常见问题与注意事项
- 权限问题:确保网站目录(如
/tags/)有写入权限,否则无法生成静态文件。 - URL不一致:生成后,检查页面的链接是否正确,如果点击tag标签后跳转的还是动态的
.php页面,请检查:tag.lib.php的修改是否正确。- 系统是否开启了伪静态。
- 是否执行了“更新系统缓存”。
- 分页问题:如果你的tag列表页有分页,修改
arc.taglist.class.php中的GetTruePath和MakeHtml方法已经处理了分页页面的静态化,生成时会依次生成tags/织梦CMS.html,tags/织梦CMS2.html等。 - 修改前备份:在进行任何文件修改之前,务必备份原文件!以防修改出错可以快速恢复。
- 模板调用:在模板文件(如
list_tag.htm)中,调用tag链接的标签仍然是[field:link/],无需修改,程序会根据你修改的逻辑自动判断并生成正确的静态或动态链接。
按照以上步骤操作,你就可以成功地为织梦5.7的tag标签实现静态化,从而提升网站的SEO表现和加载速度。
