dede tag伪静态如何实现拼音规则?

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

这通常被称为“拼音 tag 伪静态”,它能将类似 tags.php?/web/develop 这样的动态链接,美化成 /tags/web-develop.html 这样的形式,对搜索引擎更友好,也更美观。

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

实现这个功能主要分为两大步:

  1. 修改核心文件:让 DedeCMS 在保存和读取 tag 时,自动处理拼音。
  2. 配置伪静态规则:让 Web 服务器(如 Apache 或 Nginx)将拼音链接正确地转发给 tags.php

第一步:修改核心文件(处理拼音)

这一步的目的是让系统在后台添加或修改 tag 时,自动生成对应的拼音别名,我们以一个流行的 DedeCMS 拼音类为例。

准备拼音处理类文件

你需要一个 PHP 类来处理汉字转拼音,最常用的是 Pinyin.php 文件。

  • 下载地址:你可以在网上搜索 "dedecms pinyin.php" 或 "pinyin.class.php" 找到现成的文件,一个可靠的来源是 GitHub 或一些 DedeCMS 技术论坛。
  • 存放位置:将下载的 Pinyin.php 文件上传到你的 DedeCMS 根目录下的 /include/ 文件夹中。

修改 tag_add.php 文件(添加 tag 时生成拼音)

这个文件负责处理后台添加新 tag 的请求。

dede tag 伪静态 拼音
(图片来源网络,侵删)
  • 文件路径/dede/tag_add.php

  • 修改方法

    1. 找到文件开头的 require_once(dirname(__FILE__)."/config.php"); 这一行。
    2. 在它后面,添加以下代码来引入拼音类:
    // 引入拼音处理类
    require_once(DEDEINC.'/Pinyin.php');
    1. 找到处理表单数据的代码段,通常在 if($dopost=='save') 内部,你会看到类似 $tag = trim($tag); 的行。
    2. $tag = trim($tag); 这行后面,添加以下代码来生成拼音并更新 tag 变量:
    // 生成拼音别名
    $pinyin = new Pinyin();
    $py = $pinyin->output($tag, '', false); // 第三个参数 false 表示不生成带音调的拼音
    $tag = $tag; // 原始tag名称
    $tag = $py; // 使用拼音作为tag值,这是关键!
    // 注意:如果你想保留原始名称,同时使用拼音作为URL,你需要修改数据库结构。
    // 但最简单直接的方法就是用拼音覆盖tag字段,因为tag字段在URL中就是标识。

    重要提示:上面的代码直接用拼音覆盖了原始的 $tag 变量,这意味着你的 tag 表里的 tag 字段存储的就是拼音了(如 web-develop),如果你的 tag 表里同时有 tagname 字段存储原始名称,那么你需要修改逻辑,将拼音存入另一个字段或用于URL构建,对于标准DedeCMS,直接覆盖是最简单有效的方式。

修改 tag.php 文件(读取拼音 tag)

这个文件负责在前台展示 tag 页面,我们需要修改它,使其能接收拼音参数并查询对应的 tag。

  • 文件路径/tags.php

  • 修改方法

    1. 找到文件开头的 require_once(dirname(__FILE__)."/config.php");
    2. 在它后面,引入拼音类(如果还没有引入的话):
    // 引入拼音处理类
    require_once(DEDEINC.'/Pinyin.php');
    1. 找到获取 tag 名称的核心代码,通常类似 if($tag == '') exit();$tag = FilterSearch(urldecode($tag));
    2. if($tag == '') exit(); 之后,添加以下代码:
    // 如果传入的是拼音,则根据拼音查找tag
    $pinyin = new Pinyin();
    if (preg_match('/^[a-z0-9\-]+$/i', $tag)) { // 判断是否是纯字母、数字和横线,即拼音格式
        $row = $dsql->GetOne("SELECT tag FROM `#@__tag` WHERE tag = '{$tag}' ");
        if (!is_array($row)) {
            // 如果拼音找不到,尝试将拼音转回汉字查找(容错处理,可选)
            $chinese = $pinyin->output($tag, ' ', true);
            $row = $dsql->GetOne("SELECT tag FROM `#@__tag` WHERE tag LIKE '%{$chinese}%' ");
            if (!is_array($row)) {
                ShowMsg('您指定的标签不存在!', '-1');
                exit();
            }
        }
        // $tag 变量已经是拼音了,无需修改
    } else {
        // 如果传入的是汉字,则将其转为拼音(兼容旧链接)
        $tag = $pinyin->output($tag, '', false);
    }

    这段代码的作用是:当访问 /tags/web-develop.html 时,它会判断 web-develop 是拼音格式,然后直接去数据库里查找 tag 字段为 web-develop 的记录。


第二步:配置伪静态规则

修改完核心文件后,你需要告诉 Web 服务器如何将形如 /tags/web-develop.html 的请求,真实地交给 /tags.php 来处理。

Apache 服务器

  1. 确保你的 Apache 开启了 mod_rewrite 模块,大多数虚拟主机都已开启。

  2. 在你的 DedeCMS 根目录下,找到或创建一个名为 .htaccess 的文件。

  3. 将以下规则添加到 .htaccess 文件中(如果文件中已有其他规则,请将其追加或合并):

    <IfModule mod_rewrite.c>
      RewriteEngine On
      # 将 /tags/拼音.html 的请求转发到 /tags.php
      RewriteRule ^tags/([a-zA-Z0-9\-]+)\.html$ /tags.php?/$1 [L]
      # DedeCMS 默认的一些伪静态规则,如果你的网站已经配置,请保留
      RewriteRule ^index\.html$ /index.php [L]
      # ... 其他规则 ...
    </IfModule>

    规则解释

    • RewriteEngine On:开启伪静态引擎。
    • RewriteRule ^tags/([a-zA-Z0-9\-]+)\.html$ /tags.php?/$1 [L]:这是核心规则。
      • ^tags/:匹配以 /tags/ 开头的 URL。
      • ([a-zA-Z0-9\-]+):捕获一个或多个字母、数字、横线(这就是你的拼音 tag),并存储在 $1 中。
      • \.html$:匹配以 .html 结尾的 URL。
      • /tags.php?/$1:将请求重写到 /tags.php/ 后面跟上捕获到的拼音,注意 /$1 前面的问号 是为了将参数附加到查询字符串中,这与我们修改的 tag.php 文件中的 $_SERVER['PATH_INFO']$_SERVER['QUERY_STRING'] 配合使用。

Nginx 服务器

  1. 登录你的 Nginx 服务器,找到网站的配置文件,通常在 /etc/nginx/sites-available/ 目录下。

  2. server 块中,添加以下 rewrite 规则:

    server {
        # ... 其他配置如 listen, server_name, root ...
        # DedeCMS tags 伪静态规则
        rewrite "^/tags/([a-zA-Z0-9\-]+)\.html$" /tags.php?/$1 last;
        # DedeCMS 默认的一些伪静态规则
        rewrite "^/index\.html$" /index.php last;
        # ... 其他规则 ...
        # ... 其他 location 配置 ...
    }

    规则解释

    • rewrite "^/tags/([a-zA-Z0-9\-]+)\.html$" /tags.php?/$1 last;:与 Apache 类似。
      • ^/tags/([a-zA-Z0-9\-]+)\.html$:匹配 URL 模式。
      • /tags.php?/$1:重写目标。
      • last:停止处理 rewrite 检查,并使用新的 URI 进行内部查找。
  3. 保存配置文件后,执行 nginx -s reload 命令重新加载 Nginx 配置。


第三步:修改模板链接(可选但推荐)

为了确保网站内所有的 tag 链接都生成新的拼音格式,你可能需要修改模板文件。

  1. 默认模板:通常在 /templets/default/ 目录下。

  2. 查找文件:找到包含 tag 循环的文件,可能是 list_article.htmindex.htm 或其他相关模板。

  3. 定位代码:找到类似 {dede:tag row='10' getall='0'} 的标签。

  4. 修改链接:在这个标签内部,找到 <a href='[field:tagurl/]'> 这样的链接代码。

  5. 修改为拼音格式:将 [field:tagurl/] 替换为我们手动构建的拼音链接,因为此时 tag 字段本身已经是拼音了,所以可以这样修改:

    {dede:tag row='10' getall='0'}
      <a href='/tags/[field:tag/].html'>[field:tag/]</a>
    {/dede:tag}

    注意:这种直接输出 [field:tag/] 的方法,只有在第一步中我们用拼音覆盖了原始 tag 名称后才有效,如果你的 tag 表里同时有拼音和汉字字段,你需要修改调用标签。


总结与排错

  1. 检查文件权限:确保你修改的 PHP 文件和 .htaccess 文件有正确的读写权限。
  2. 清除缓存:修改完文件后,务必在 DedeCMS 后台清除所有缓存(系统 -> 站点缓存 -> 清除)。
  3. 测试
    • 在后台添加一个新 tag,织梦CMS”,检查数据库里 tag 字段是否变成了拼音(如 zhi-meng-cms)。
    • 前台访问 http://你的域名/tags/zhi-meng-cms.html,看是否能正常显示 tag 页面。
    • 检查其他地方的 tag 链接是否也变成了拼音格式。
  4. 常见问题
    • 404 Not Found:伪静态规则没生效,检查 .htaccess 是否在根目录,规则语法是否正确,或 Nginx 配置是否已重载。
    • 页面空白或报错:PHP 代码修改有误,检查 Pinyin.php 文件是否上传正确,PHP 语法是否有错误。
    • 找不到标签:可能是数据库里没有对应的拼音记录,或者 tag.php 里的查询逻辑有问题。

通过以上步骤,你就可以成功地为 DedeCMS 配置基于拼音的 tag 伪静态了。

-- 展开阅读全文 --
头像
power by dede58
« 上一篇 01-04
织梦右键查看失效如何修复?
下一篇 » 01-04

相关文章

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

目录[+]