dede列表分页伪静态规则怎么设置?

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

这是一个非常常见的需求,伪静态的好处主要有:

dede列表分页伪静态
(图片来源网络,侵删)
  • SEO友好:URL中包含关键词,对搜索引擎更友好。
  • 用户体验好:URL看起来更简洁、美观,符合用户习惯。
  • 隐藏技术细节:对外不暴露 .php 等后缀,增加安全性。

实现 DedeCMS 列表分页伪静态主要分为两大步:

  1. 服务器配置:让服务器能够将伪静态URL正确地重写为真实的PHP文件。
  2. DedeCMS 程序配置:修改 DedeCMS 的相关文件,使其生成伪静态的链接。

第一步:服务器配置

这是最关键的一步,如果服务器配置不正确,伪静态链接会返回 404 错误。

Apache 服务器

如果你的服务器是 Apache,并且开启了 mod_rewrite 模块(虚拟主机一般都默认开启),操作如下:

  1. 在网站根目录创建 .htaccess 文件

    dede列表分页伪静态
    (图片来源网络,侵删)
    • 如果文件已存在,直接编辑它。
    • 如果不存在,新建一个文件,命名为 .htaccess(注意前面的点)。
  2. 将以下代码写入 .htaccess 文件中

    # 将 RewriteEngine 开启
    RewriteEngine On
    # DedeCMS 列表分页伪静态规则
    RewriteRule ^list-([0-9]+)-([0-9]+)\.html$ /plus/list.php?tid=$1&PageNo=$2 [L]
  3. 代码解释

    • RewriteEngine On:开启重写引擎。
    • RewriteRule:定义重写规则。
    • ^list-([0-9]+)-([0-9]+)\.html$:这是匹配的URL模式。
      • ^:字符串开始。
      • list-:固定的 "list-" 字符串。
      • ([0-9]+):一个或多个数字,用括号捕获,第一个代表栏目ID(tid)。
      • 一个连字符。
      • ([0-9]+):又一个或多个数字,用括号捕获,第二个代表页码(PageNo)。
      • \.html:匹配 ".html" 后缀。
      • 字符串结束。
    • /plus/list.php?tid=$1&PageNo=$2:这是重写后的真实URL。
      • $1$2 分别对应前面括号中捕获的第一个和第二个数字。
      • [L]:表示如果这条规则匹配成功,就停止处理后续的 RewriteRule。
  4. 重启 Apache 服务,让配置生效。

Nginx 服务器

如果你的服务器是 Nginx,操作如下:

dede列表分页伪静态
(图片来源网络,侵删)
  1. 找到 Nginx 的配置文件,通常是 nginx.conf 或在 vhost 目录下的你的网站配置文件。

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

    # DedeCMS 列表分页伪静态规则
    rewrite "^/list-([0-9]+)-([0-9]+)\.html$" /plus/list.php?tid=$1&PageNo=$2 last;
  3. 代码解释

    • rewrite:Nginx 的重写指令。
    • "^/list-([0-9]+)-([0-9]+)\.html$":匹配的URL模式,和 Apache 类似。
    • /plus/list.php?tid=$1&PageNo=$2:重写后的真实URL。
    • last:表示停止执行当前的 rewrite 检查,然后搜索匹配 location 规则。
  4. 重启 Nginx 服务,让配置生效。


第二步:DedeCMS 程序配置

服务器配置好后,需要修改 DedeCMS 的程序文件,让它生成我们想要的伪静态链接。

修改 arc.listview.class.php 文件

这个文件是 DedeCMS 处理列表页的核心文件,我们需要修改它来分页链接的生成方式。

  1. 找到文件位置include/arc.listview.class.php

  2. 编辑文件:使用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开该文件。

  3. 找到并修改分页函数: 搜索 GetPageListST 函数,找到生成页码链接的代码段,通常在文件末尾附近。

    找到类似这样的代码(可能因版本不同略有差异):

    // 修改前
    $plist .= $jstempstr;
    $plist .= $listdd;
    $plist .= "<li><span class=\"pageinfo\">共 <strong>$totalpage</strong> 页</span></li>\r\n";
    $plist .= "</ul>\r\n";
    return $plist;

    将生成链接的代码部分进行修改,你需要找到 $jstempstr 的赋值部分,通常是一个 str_replace 或者 preg_replace

    以较新版本的 DedeCMS 5.7 为例,找到类似下面这样的代码块:

    // ... 在 GetPageListST 函数内部 ...
    // 获取链接的函数
    $geturl = "GetListUrl($j)";
    // 修改前,通常是动态链接
    // $plist .= "<li><a href='".$geturl."'>".$j."</a></li>\r\n";
    // ...
    // $plist .= "<li><a href='".$geturl."'>下一页</a></li>\r\n";
    // ...
    // $plist .= "<li><a href='".$geturl."'>末页</a></li>\r\n";

    将其修改为伪静态链接格式,你需要修改所有生成 href 属性的地方。

    修改后的代码示例

    // ... 在 GetPageListST 函数内部 ...
    // 获取栏目ID
    $tid = $this->TypeID;
    // 修改分页链接的生成逻辑
    // 首页
    $indexpage = "<li><a href='/list-".$tid."-1.html'>首页</a></li>\r\n";
    // 上一页
    $prepage = "<li><a href='".$this->GetPrePage()."' class='a1'>上一页</a></li>\r\n";
    // 注意:上一页和下一页通常有自己的函数,可以直接调用,为了统一格式,可以也手动构造
    // 手动构造上一页
    if($this->PageNo != 1)
    {
        $prepage = "<li><a href='/list-".$tid."-".($this->PageNo-1).".html'>上一页</a></li>\r\n";
    }
    else
    {
        $prepage = "<li><span class='a1'>上一页</span></li>\r\n";
    }
    // 下一页
    // 手动构造下一页
    if($this->PageNo != $totalpage)
    {
        $nextpage = "<li><a href='/list-".$tid."-".($this->PageNo+1).".html'>下一页</a></li>\r\n";
    }
    else
    {
        $nextpage = "<li><span class='a1'>下一页</span></li>\r\n";
    }
    // 末页
    $endpage = "<li><a href='/list-".$tid."-".$totalpage.".html'>末页</a></li>\r\n";
    // 中间页码
    $listdd = '';
    for($j=1;$j<=$totalpage;$j++)
    {
        if($j==$this->PageNo)
        {
            $listdd .= "<li><span class=\"thisclass\">$j</span></li>\r\n";
        }
        else
        {
            $listdd .= "<li><a href='/list-".$tid."-".$j.".html'>".$j."</a></li>\r\n";
        }
    }
    // 拼接最终的分页HTML
    $plist = "<div class=\"dede_pages\">\r\n";
    $plist .= "<ul>\r\n";
    $plist .= $indexpage;
    $plist .= $prepage;
    $plist .= $listdd;
    $plist .= $nextpage;
    $plist .= $endpage;
    $plist .= "<li><span class=\"pageinfo\">共 <strong>$totalpage</strong> 页</span></li>\r\n";
    $plist .= "</ul>\r\n";
    $plist .= "</div>\r\n";
    return $plist;

    说明

    • 我们直接硬编码了链接的格式为 /list-{栏目ID}-{页码}.html
    • $this->TypeID 就是当前列表页的栏目ID。
    • $this->PageNo 是当前页码。
    • $totalpage 是总页数。
    • 这种方法最直接,但缺点是如果未来想修改URL格式,需要再次修改这个文件。
  4. 保存文件


第三步:后台设置(可选,但推荐)

在 DedeCMS 后台,你也可以开启一个开关,让系统在生成HTML时也使用伪静态的链接。

  1. 登录 DedeCMS 后台。
  2. 进入 “系统” -> “系统基本参数” -> “核心设置”
  3. 找到 “列表命名规则” 这一项。
  4. 将其修改为 list_{tid}_{page}.html 或者你想要的任何格式(list-{tid}-{page}.html)。
  5. 保存。

注意:这个设置主要影响你使用“生成HTML”功能时,生成的静态列表页文件名,对于动态分页,你需要按照第二步的代码修改来实现。


总结与验证

完成以上步骤后:

  1. 清空浏览器缓存
  2. 访问一个列表页,http://你的域名.com/plus/list.php?tid=1
  3. 查看页面源代码,检查分页部分的链接是否已经变成了 http://你的域名.com/list-1-2.html 这样的格式。
  4. 点击分页链接,测试是否能正常跳转并显示内容。

如果出现 404 错误,请首先检查 第一步的 .htaccess 或 Nginx 配置 是否正确,并确保服务器已重启。

常见问题

  • Q: 为什么我改了代码,链接没变?

    • A: 1. 请确认修改的是正确的文件 include/arc.listview.class.php,2. 检查缓存,清除浏览器缓存和DedeCMS后台的“更新缓存”,3. 检查服务器配置是否正确。
  • Q: 为什么首页或栏目首页的链接也变了,但我想让它保持动态?

    A: 上述修改是针对所有列表页的,如果你只想修改分页,不想修改首页/栏目首页的链接,需要更精确地修改代码逻辑,确保只有页码大于1时才生成伪静态链接,但通常保持统一格式是更好的做法。

  • Q: 我的URL格式想用 category/1/2.html 怎么办?

    • A: 只需要修改 .htaccessarc.listview.class.php 中的URL模式即可。.htaccess 规则改为 RewriteRule ^category/([0-9]+)/([0-9]+)\.html$ ...,PHP代码中改为 href='/category/".$tid."/".$j.".html'

希望这份详细的教程能帮助你成功实现 DedeCMS 列表分页的伪静态!

-- 展开阅读全文 --
头像
dede自适应移动模板如何快速搭建与配置?
« 上一篇 03-14
织梦点网页如何打开新网页?
下一篇 » 03-14

相关文章

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

目录[+]