7织梦tag静态化如何实现?

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

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

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

实现 tag 静态化主要分为三个步骤:

  1. 后台开启伪静态:这是基础,告诉服务器如何将URL重写为静态形式。
  2. 修改程序文件:让织梦程序支持生成静态的HTML文件。
  3. 更新和生成:更新相关缓存,并重新生成 tag 页面。

第一步:后台开启伪静态

在修改任何代码之前,请务必先在织梦后台开启伪静态功能。

  1. 登录织梦后台。
  2. 进入【系统】 -> 【系统基本参数】。
  3. 在左侧菜单选择【核心设置】。
  4. 找到 “是否使用伪静态” 这一项,将其值修改为 “是”。
  5. 点击【保存】。

注意:开启伪静态后,你的服务器必须已经配置好了对应的伪静态规则,如果你用的是虚拟主机,通常主机商会提供规则;如果是自己配置的服务器(如Nginx, Apache),需要手动添加规则。

织梦 Tag 伪静态规则参考:

5.7织梦 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) 这个判断存在即可。


第三步:更新缓存与生成页面

文件修改完成后,需要让织梦识别这些改动。

  1. 更新系统缓存

    • 进入后台【系统】 -> 【一键更新网站】
    • 在左侧菜单选择 【更新系统缓存】,然后点击【开始执行】。
    • 这一步至关重要,能确保织梦加载你修改的新逻辑。
  2. 生成 tag 页面

    • 进入后台【核心】 -> 【批量生成HTML】
    • 在左侧菜单选择 【更新Tags】
    • 你可以选择“更新所有Tags”或者指定更新,点击【开始生成】。
    • 程序会根据你现有的所有tag,逐一生成对应的静态HTML文件,tags/织梦CMS.htmltags/网站建设.html 等。

常见问题与注意事项

  • 权限问题:确保网站目录(如 /tags/)有写入权限,否则无法生成静态文件。
  • URL不一致:生成后,检查页面的链接是否正确,如果点击tag标签后跳转的还是动态的 .php 页面,请检查:
    1. tag.lib.php 的修改是否正确。
    2. 系统是否开启了伪静态。
    3. 是否执行了“更新系统缓存”。
  • 分页问题:如果你的tag列表页有分页,修改 arc.taglist.class.php 中的 GetTruePathMakeHtml 方法已经处理了分页页面的静态化,生成时会依次生成 tags/织梦CMS.html, tags/织梦CMS2.html 等。
  • 修改前备份:在进行任何文件修改之前,务必备份原文件!以防修改出错可以快速恢复。
  • 模板调用:在模板文件(如 list_tag.htm)中,调用tag链接的标签仍然是 [field:link/],无需修改,程序会根据你修改的逻辑自动判断并生成正确的静态或动态链接。

按照以上步骤操作,你就可以成功地为织梦5.7的tag标签实现静态化,从而提升网站的SEO表现和加载速度。

-- 展开阅读全文 --
头像
织梦同步pcwap插件,如何实现无缝适配?
« 上一篇 今天
织梦不能采集https
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]