dede tag标签如何伪静态化?

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 DEDE建站 正文

Tag 标签伪静态是 DedeCMS 优化中非常重要的一步,它可以将类似 tags.php?/关键词/ 这样的动态链接,转换为更美观、更利于搜索引擎抓取和用户分享的静态链接格式,tags/关键词.htmltags/关键词/

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

下面我将提供两种最主流、最稳定的方法,并附上详细的步骤和注意事项。


使用 DedeCMS 自带的“伪静态”功能(推荐,最简单)

这是 DedeCMS 系统内置的功能,利用服务器上的 rewrite 规则来实现,无需修改核心程序文件,是首选方法。

第 1 步:开启后台的“使用伪静态”

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

第 2 步:配置服务器的 Rewrite 规则

这一步是关键,不同的 Web 服务器(如 Apache, Nginx)配置方法不同,您需要根据您的服务器环境选择对应的配置文件并添加规则。

重要提示:修改服务器配置文件前,务必先备份原文件,以防配置错误导致网站无法访问。

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

Apache 服务器配置

Apache 服务器通常使用 .htaccess 文件来管理 Rewrite 规则。

  • 检查根目录下是否存在 .htaccess 文件,如果不存在,请创建一个。
  • 编辑 .htaccess 文件,将以下规则添加到文件中,如果文件中已有 RewriteEngine On,则只需添加 RewriteRule 部分。
# 将 RewriteEngine 开启
RewriteEngine On
# 如果请求的文件或目录真实存在,则直接访问,不进行重写
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# DedeCMS 主站伪静态规则 (如果已有,请保留)
RewriteRule ^index\.html$ index\.php [L]
# DedeCMS 文章列表、文章内容页伪静态规则 (如果已有,请保留)
RewriteRule ^category/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ index\.php?action=list&classid=$1&mid=$2&tempid=$3 [L]
RewriteRule ^category/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ index\.php?action=list&classid=$1&mid=$2 [L]
RewriteRule ^category/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ index\.php?action=article&classid=$1&mid=$2&aid=$3 [L]
RewriteRule ^category/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)\.html$ index\.php?action=article&classid=$1&mid=$2&aid=$3 [L]
# ------------------- 以下是 Tag 标签伪静态规则 -------------------
# 将 /tags.php?/关键词/ 格式重写为 /tags/关键词.html
RewriteRule ^tags/([^/]+)\.html$ tags\.php\?\/$1\/ [L]
# ------------------- Tag 标签伪静态规则结束 -------------------

规则解释RewriteRule ^tags/([^/]+)\.html$ tags\.php\?\/$1\/ [L]

  • ^tags/([^/]+)\.html$:匹配用户请求的 URL 格式,以 tags/ 开头,中间是任意非 的字符(([^/]+)),最后是 .html
  • tags\.php\?\/$1\/:将其重写为服务器实际执行的动态脚本。$1 代表匹配到的“关键词”部分。
  • [L]:表示如果这条规则匹配成功,则停止后续的 Rewrite 规则。

Nginx 服务器配置

Nginx 服务器通常在虚拟主机配置文件(如 nginx.conf 或站点配置文件)中添加 rewrite 规则。

  • 找到您的网站配置文件
  • server 块中添加以下规则:
# ------------------- 以下是 Tag 标签伪静态规则 -------------------
# 将 /tags/关键词.html 格式重写为 /tags.php?/关键词/
rewrite "^/tags/([^/]+)\.html$" /tags.php?/$1/ last;
# ------------------- Tag 标签伪静态规则结束 -------------------

规则解释rewrite "^/tags/([^/]+)\.html$" /tags.php?/$1/ last;

dede tag标签伪静态化
(图片来源网络,侵删)
  • ^/tags/([^/]+)\.html$:匹配用户请求的 URL 格式,与 Apache 类似。
  • /tags.php?/$1/:将其重写为服务器实际执行的动态脚本。
  • last:表示停止处理当前的 rewrite 规则,并搜索与重写后的 URL 匹配的 location。

第 3 步:更新缓存并测试

  1. 在 DedeCMS 后台,进入 系统 -> 一键更新网站 -> 更新缓存,执行缓存更新。
  2. 访问您的网站,点击任意一个 tag 标签,查看浏览器地址栏的链接是否已经变成了 tags/关键词.html 的格式。
  3. 如果页面正常显示,说明伪静态化成功。

修改 tags.php 文件(备用方法)

如果方法一因为服务器权限或环境问题无法实现,可以使用这个方法,它的原理是直接修改 tags.php 文件,让它能够识别和处理静态格式的 URL。

第 1 步:备份原文件

在修改任何核心文件之前,请务必备份 根目录/tags.php 文件。

第 2 步:编辑 tags.php 文件

用文本编辑器(如 Notepad++, VS Code)打开 根目录/tags.php 文件。

找到类似下面的代码段(通常在文件的开头部分):

// 检测Tag别名
if(isset($_GET['tagname']))
{
    $tagid = GetTagID($tagname);
    if($tagid > 0)
    {
        $tags = GetTags($tagid);
        $tagname = $tags['tagname'];
    }
    else
    {
        $tags = '';
        include(DEDETEMPLATE.'/error.htm');
        exit();
    }
}

将其替换为以下代码

// 检测Tag别名 (支持伪静态URL /tags/关键词.html)
$tagname = '';
if(isset($_GET['tagname'])) {
    // 处理动态URL tags.php?/关键词/
    $tagname = $_GET['tagname'];
} else if (isset($_SERVER['PATH_INFO'])) {
    // 处理伪静态URL /tags/关键词.html
    $path_info = trim($_SERVER['PATH_INFO'], '/');
    // 匹配 /tags/关键词.html 格式
    if (preg_match('~^tags/([^/]+)\.html$~', $path_info, $matches)) {
        $tagname = $matches[1];
    }
}
if($tagname != '')
{
    $tagid = GetTagID($tagname);
    if($tagid > 0)
    {
        $tags = GetTags($tagid);
        $tagname = $tags['tagname'];
    }
    else
    {
        $tags = '';
        include(DEDETEMPLATE.'/error.htm');
        exit();
    }
}

代码解释: 这段新增的代码会首先检查是否存在 PATH_INFO 变量(这是伪静态URL传递过来的信息),如果存在,就通过正则表达式 ~^tags/([^/]+)\.html$~ 来提取出关键词部分,并将其赋值给 $tagname 变量,后续的逻辑保持不变,从而实现了对静态URL的支持。

第 3 步:创建或修改 .htaccess / nginx.conf 文件

即使修改了 PHP 文件,你仍然需要一个 301 重定向,将 tags.php?/关键词/ 的旧链接永久重定向到新的 tags/关键词.html 格式,这有利于 SEO。

  • Apache (.htaccess): 在 .htaccess 文件中添加:
    RewriteCond %{QUERY_STRING} ^\/(.*)\/$
    RewriteRule ^tags\.php$ tags/%1.html? [R=301,L]
  • Nginx (nginx.conf): 在 server 块中添加:
    if ($args ~* "^\/(.*)\/$") {
        rewrite ^/tags\.php$ /tags/$1.html? permanent;
    }

常见问题与注意事项

  1. 404 Not Found 错误

    • 原因:通常是服务器 Rewrite 规则配置错误或未生效。
    • 解决
      • 检查规则:仔细核对 .htaccessnginx.conf 中的规则是否与上文提供的完全一致。
      • 检查模块:确保 Apache 的 mod_rewrite 模块已启用,Nginx 的 rewrite 模块已编译。
      • 检查权限:确保 .htaccess 文件在 Apache 服务器下有正确的执行权限。
      • 重启服务:修改 Nginx 配置后,需要执行 nginx -s reload 命令使配置生效。
  2. 显示正常,但链接还是动态的

    • 原因:只修改了服务器规则,但页面里的标签链接没有被更新。
    • 解决:这通常是因为模板文件(如 list_article.htm)中的标签调用方式没有使用 GetTagUrl 函数,DedeCMS 默认的标签调用代码是 <a href='[field:tagurl/]'>[field:tagname/]</a>,这里的 [field:tagurl/] 会根据后台的“是否使用伪静态”设置自动生成对应的链接,如果后台设置已开启,但链接还是动态的,请检查模板文件是否被修改过。
  3. 选择哪种方法?

    • 优先选择方法一,它是 DedeCMS 官方推荐的方式,不修改核心文件,更安全,升级系统时不会被覆盖。
    • 方法二 作为备用方案,当你的服务器环境非常特殊,无法使用方法一时使用。

希望这份详细的指南能帮助您成功实现 DedeCMS tag 标签的伪静态化!

-- 展开阅读全文 --
头像
C语言中outputline是什么?
« 上一篇 前天
C语言compare str函数如何比较字符串?
下一篇 » 前天

相关文章

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

目录[+]