织梦tag伪静态如何设置?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 织梦建站 正文

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

织梦 tag 伪静态
(图片来源网络,侵删)

实现伪静态主要分为两大步:

  1. 修改织梦程序文件:让织梦生成静态规则的URL。
  2. 配置Web服务器:将带有特定规则的URL请求,真实地映射到织梦的动态文件上。

第一步:修改织梦程序文件

这一步的目的是让织梦在生成标签链接时,使用我们想要的静态格式。

修改 arc.taglist.class.php 文件

这个文件是处理标签列表页的核心文件,我们需要修改它,让它生成 tags/标签名.html 这样的链接。

文件路径/include/arc.taglist.class.php

织梦 tag 伪静态
(图片来源网络,侵删)

操作步骤

  1. 用编辑器打开 arc.taglist.class.php 文件。
  2. 找到 GetTagUrl() 这个函数(通常在文件的后半部分)。
  3. 将这个函数内部的代码替换为以下代码:
/**
*  获取标签链接
*
* @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

织梦 tag 伪静态
(图片来源网络,侵删)

操作步骤

  1. 打开 taglib_taglist.lib.php 文件。
  2. 找到 function GetTags($refObj, $cquery) 函数。
  3. 在函数内,找到生成URL的代码,通常是一个 return 语句,包含 MakeTag()
  4. 将其修改为使用我们上面定义的 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 文件配置。

  1. 确保你的网站根目录下有 .htaccess 文件,如果没有,请创建一个。
  2. 将以下代码添加到 .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 或你网站对应的配置文件)。

  1. 找到你的 server 配置块。
  2. 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 块来处理请求。

第三步:更新缓存和测试

  1. 更新缓存:登录织梦后台,点击“系统” -> “更新缓存”,确保所有生成的链接都使用了新的规则。
  2. 更新栏目和文档HTML:为了确保所有内链都正确,建议去“更新主页HTML”、“更新栏目HTML”和“更新文档HTML”里执行一次全站更新。
  3. 测试
    • 在网站前台点击任何一个标签链接,检查是否能正常跳转到标签列表页。
    • 观察浏览器地址栏的URL是否已经变成了 tags/标签名.html 的格式。
    • 如果出现404错误,请仔细检查 .htaccessnginx.conf 的配置是否正确,特别是语法和路径。

常见问题排查

  • 404错误
    • 原因1:伪静态规则未生效或写错,请检查 .htaccess 文件是否在网站根目录,以及规则语法是否正确,对于Nginx,确保配置已重新加载。
    • 原因2tags.php 文件不存在或无权限访问,检查文件是否在根目录。
  • 500错误
    • 原因.htaccess 文件语法错误,检查是否有拼写错误或括号不匹配。
  • URL还是动态的
    • 原因:程序修改未生效,请检查 arc.taglist.class.php 文件是否已成功保存,并确保更新了网站缓存。

通过以上三个步骤,你就可以成功地为织梦CMS的标签功能实现伪静态了,这不仅提升了网站的美观度,对搜索引擎优化(SEO)也非常有帮助。

-- 展开阅读全文 --
头像
dede留言板如何高效管理?
« 上一篇 04-12
C语言getcwd函数如何获取当前工作目录?
下一篇 » 04-12
取消
微信二维码
支付宝二维码

目录[+]