dede tag伪静态nginx如何配置?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 DEDE建站 正文
  1. 修改 DedeCMS 程序文件:让 DedeCMS 生成符合我们期望的 TAG 链接格式。
  2. 配置 Nginx 服务器:将带有特定格式的链接地址,真实地映射到对应的 PHP 脚本上。

第一步:修改 DedeCMS 程序文件 (核心步骤)

这一步的目的是将类似 tags.php?/标签名/ 这样的动态链接,修改为 tags/标签名.html 这样的伪静态链接。

dede tag 伪静态 nginx
(图片来源网络,侵删)

我们需要修改两个关键文件:

修改 taglib_tag.php 文件

这个文件是 DedeCMS 的标签库文件,用于解析和生成 [field:link/] 这样的标签,我们需要修改它,让它在生成 TAG 链接时使用新的伪静态格式。

文件路径/include/taglib/taglib_tag.php

操作步骤

dede tag 伪静态 nginx
(图片来源网络,侵删)
  1. 打开 taglib_tag.php 文件。
  2. 找到 function GetTags($typeid = 0) 函数。
  3. 在函数内找到 $revalue = ''; 这一行。
  4. foreach($dsql->GetArray('me') as $row) 循环内部,找到生成链接的代码行,它通常是这样的:
    $revalue .= ($revalue == '' ? '' ',').'<a href="'.$cfg_cmsurl."/tags.php?/".$row['tag']."/\" class=\"tag\">".$row['tag'].'</a>';
  5. 将其修改为
    // 将动态链接 tags.php?/标签名/ 修改为伪静态链接 /tags/标签名.html
    $revalue .= ($revalue == '' ? '' ',').'<a href="'.$cfg_cmsurl."/tags/".$row['tag'].".html\" class=\"tag\">".$row['tag'].'</a>';
    • 注意:这里我们使用了 $cfg_cmsurl 变量,它会自动调用你后台设置的“网站根目录”,如果你的网站根目录是 ,那么最终生成的链接就是 /tags/标签名.html,如果你的网站是放在子目录,/dedecms/$cfg_cmsurl /dedecms/,最终链接会是 /dedecms/tags/标签名.html

修改 arc.taglist.class.php 文件

这个文件是 TAG 列表页的核心类文件,用于处理 TAG 列表页的显示和分页链接,我们需要修改它,让列表页本身的链接和分页链接都变成伪静态格式。

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

操作步骤

  1. 打开 arc.taglist.class.php 文件。

    dede tag 伪静态 nginx
    (图片来源网络,侵删)
  2. 修改列表页链接:找到 function GetListUrl($gtype) 函数,在里面找到 return $this->MakeFirstTag($this->TagInfos['tagname']); 这一行,它返回的是当前 TAG 列表页的 URL,通常它会返回 tags.php?/标签名/

    • 修改为
      // 将列表页链接修改为伪静态格式
      return $this->MakeFirstTag($this->TagInfos['tagname']) . '.html';
    • 注意:这行代码通常在一个 switch 语句的 case '1': 分支里,请确保修改正确。
  3. 修改分页链接:找到 function GetPageListDM($list_len,$listitem="",$isdatinfo="true") 函数,这个函数生成分页代码,我们需要找到生成分页链接的部分,它通常是 plus 目录下的 list.php

    • 在函数内搜索 $plist = ''; 或类似代码,找到生成分页链接的循环。

    • 找到类似 return $this->GetCurUrl(); 的代码,这通常是生成分页链接的核心。

    • 将其修改为

      // 修改分页链接,将动态链接改为伪静态
      $tagname = urlencode($this->TagInfos['tagname']);
      $pagenow = $this->PageNo;
      $totalpage = $this->TotalPage;
      // 生成首页、上一页等链接
      $prepage = $this->GetPrePage();
      $nextpage = $this->GetNextPage();
      // 这里直接构建伪静态分页链接
      $listUrl = $this->NameFirst . $tagname . '.html';
      // ... 后续代码需要重构以适应伪静态分页 ...
      // 以下是一个更完整的修改示例,请根据你的代码结构调整
      $plist = '';
      if($totalpage > 1){
          if($this->PageNo != 1){
              $plist .= "<a href='".$listUrl."'>首页</a> ";
              $plist .= "<a href='".$prepage."'>上一页</a> ";
          }
          $plist .= "<span class=\"pageinfo\">共".$totalpage."页/".$this->TotalResult."条</span> ";
          if($this->PageNo!=$totalpage){
              $plist .= "<a href='".$nextpage."'>下一页</a> ";
              $plist .= "<a href='".$listUrl . "-" . $totalpage . ".html'>末页</a> ";
          }
      }
      return $plist;
    • 更简单且兼容性更好的修改方法:在 GetPageListDM 函数中,找到生成 $plist 字符串的循环,将类似 plus/list.php?tid=... 的链接,替换为 tags/标签名-页码.html 的格式,将 return $this->GetCurUrl(); 这样的行替换为:

      // 一个更通用的修改方法,将动态分页URL替换为伪静态
      $tagname = urlencode($this->TagInfos['tagname']);
      $plist = str_replace("plus/list.php?tid=".$this->TypeID, "tags/".$tagname."-".$this->PageNo.".html", $plist);
      return $plist;

      注意:这种方法可能需要根据你的 DedeCMS 版本和具体代码进行调整。


第二步:配置 Nginx 服务器规则

修改完程序后,我们需要告诉 Nginx 如何处理这些新的 .html 链接,Nginx 需要将请求重写回 tags.php 脚本。

操作步骤

  1. 登录你的 Nginx 服务器。
  2. 找到你的网站配置文件,通常位于 /etc/nginx/sites-available/ 目录下,或者 /usr/local/nginx/conf/vhost/ 目录下(取决于你的安装方式)。
  3. 打开对应的网站配置文件(your_domain.com.conf)。
  4. server 块中,添加或修改 location 块。

推荐(更简洁、高效)

这个方案将所有对 /tags/ 目录下的请求都交给 tags.php 处理。

server {
    # ... 其他配置 ...
    # 将 /tags/目录下的所有请求都交给 tags.php 处理
    # /tags/你好.html -> tags.php?/你好/
    location /tags/ {
        # rewrite ^/tags/(.*)\.html$ /tags.php?/$1/ last;
        # 或者使用更健壮的 rewrite 规则
        rewrite ^/tags/([^\.]+)\.html$ /tags.php?/$1/ last;
    }
    # ... 其他配置 ...
}

规则解释

  • location /tags/ { ... }:匹配所有以 /tags/ 开头的请求。
  • rewrite ^/tags/([^\.]+)\.html$ /tags.php?/$1/ last;:这是重写规则。
    • ^:匹配字符串的开始。
    • /tags/:匹配字面量 /tags/
    • ([^\.]+):这是一个捕获组,匹配一个或多个除了 以外的字符(即标签名),这个标签名会被存储在 $1 变量中。
    • \.html$:匹配字面量 .html,并到达字符串的结尾。
    • /tags.php?/$1/:将匹配到的 URL 重写为 /tags.php?/标签名/ 的形式。
    • last:停止处理当前的 rewrite 指令,并使用重写后的 URL 在 server 块中重新开始搜索匹配的 location,它会将请求交给 location ~ \.php$ { ... } 块去处理。

处理分页链接

如果你按照第一步修改了分页链接为 tags/标签名-页码.html,Nginx 规则需要稍作调整以支持这种格式。

server {
    # ... 其他配置 ...
    # 方案一:处理不带分页的链接
    location ~ ^/tags/([^\.]+)\.html$ {
        rewrite ^/tags/([^\.]+)\.html$ /tags.php?/$1/ last;
    }
    # 方案二:处理带分页的链接 ( tags/你好-2.html)
    location ~ ^/tags/([^\.]+)-(\d+)\.html$ {
        # 将 /tags/你好-2.html 重写为 /tags.php?/你好/&page=2
        rewrite ^/tags/([^\.]+)-(\d+)\.html$ /tags.php?/$1/&page=$2 last;
    }
    # ... 其他配置 ...
}

这个方案使用了更精确的正则表达式来匹配两种不同的链接格式。


第三步:最终检查与重启

  1. 检查配置:在修改 Nginx 配置文件后,务必先检查配置语法是否正确,在终端运行:

    nginx -t

    如果看到 syntax is oktest is successful 的提示,说明配置没有语法错误。

  2. 重启 Nginx:配置无误后,平滑重启 Nginx 以使新配置生效:

    # 平滑重启(推荐)
    nginx -s reload
    # 或者直接重启服务
    # systemctl restart nginx
    # /etc/init.d/nginx restart
  3. 清除缓存

    • 登录 DedeCMS 后台,进入“系统” -> “SQL命令行工具”,执行 optimize table dede_tagindex; optimize table dede_taglist; 来优化数据库表。
    • 清除 DedeCMS 的“更新HTML缓存”。
    • 清除浏览器缓存,或者使用无痕模式访问网站。
步骤 操作 目的
修改程序 修改 taglib_tag.phparc.taglist.class.php 让 DedeCMS 生成 tags/标签名.html 格式的链接
配置Nginx server 块中添加 rewrite 规则 tags/标签名.html 的请求转发给 tags.php 处理
重启服务 运行 nginx -s reload 使 Nginx 新配置生效
清除缓存 清除 DedeCMS 和浏览器缓存 确保能看到最新的效果

完成以上步骤后,你的 DedeCMS TAG 标签就应该成功实现伪静态了,你可以通过在文章中添加 TAG,然后在前台点击标签链接,观察浏览器地址栏的变化,并确保页面能正常显示,如果页面显示异常,请检查浏览器控制台的错误信息和 Nginx 的错误日志(/var/log/nginx/error.log),通常能快速定位问题。

-- 展开阅读全文 --
头像
织梦WAP模板如何自适应各种手机屏幕?
« 上一篇 2025-12-11
手机APP推广赚钱模板真能轻松赚钱吗?
下一篇 » 2025-12-11

相关文章

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

目录[+]