dede列表页连接如何正确生成与修改?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 DEDE建站 正文
  1. 列表页链接的基本结构
  2. 列表页链接是如何生成的?(核心机制)
  3. 如何修改列表页的链接形式?(伪静态与动态)
  4. 常见问题与解决方案

列表页链接的基本结构

一个典型的 DedeCMS 列表页链接通常有以下几种形式:

dede 列表页连接
(图片来源网络,侵删)

a) 动态链接

这是最基础的形式,URL 中包含 和查询参数。

  • 栏目列表页: https://www.yourdomain.com/plus/list.php?tid=2

    • plus/list.php: 列表页的动态脚本文件。
    • tid=2: 栏目ID,系统通过这个 ID 找到对应的栏目,并调用其内容。
  • 分页链接: https://www.yourdomain.com/plus/list.php?tid=2&PageNo=3

    • PageNo=3: 表示第 3 页。

b) 伪静态链接

这种链接形式看起来像静态的 HTML 文件,但实际上是由服务器动态重写过来的,对搜索引擎更友好。

dede 列表页连接
(图片来源网络,侵删)
  • 栏目列表页: https://www.yourdomain.com/seohtml/2.html

    • seohtml: 一个自定义的目录,用于存放所有伪静态的列表页和文章页。
    • html: 栏目ID.html,文件名就是栏目 ID。
  • 分页链接: https://www.yourdomain.com/seohtml/2_3.html

    • 2_3.html: 栏目ID_页码.html

列表页链接是如何生成的?(核心机制)

理解这个机制,你就能明白为什么链接会是这样,以及如何去修改它。

链接的生成主要取决于两个核心部分:栏目设置系统全局参数

dede 列表页连接
(图片来源网络,侵删)

在“栏目管理”中设置栏目

这是最关键的一步,当你创建或编辑一个栏目时,需要为其指定链接形式。

  1. 登录 DedeCMS 后台。
  2. 进入「核心」 -> 「栏目管理」。
  3. 点击你要编辑的栏目,进入「常规选项」标签页。
  4. 找到 列表选项 部分,你会看到 “列表命名规则” 这个输入框。

这个输入框里的内容,就是决定列表页链接格式的核心代码。

默认的命名规则代码解释:

  • 默认值(动态链接):

    {tid}

    这是最简单的规则,系统会自动在它外面包装上默认的路径,形成 plus/list.php?tid={tid}

  • 默认伪静态规则:

    {tid}/index.html

    这个规则会生成类似 栏目目录/栏目ID/index.html 的链接,在 DedeCMS 的默认伪静态配置中,这个规则通常会被服务器重写为 seohtml/{tid}.html

在“系统参数”中设置全局规则

后台的「系统」 -> 「系统基本参数」 -> 「核心设置」里,也有一处与链接相关的设置。

  • 栏目列表命名规则:
    • 这个设置通常是一个全局默认值,当你创建新栏目时,如果没有在“栏目管理”中特别指定,就会使用这里的规则。
    • 它的作用和“栏目管理”中的“列表命名规则”是一样的,只是作用域不同。优先级是:栏目管理中的设置 > 系统参数中的设置

服务器进行 URL 重写(伪静态生效的关键)

伪静态链接之所以能工作,不是 DedeCMS 本身直接生成了 HTML 文件,而是服务器(如 Apache, Nginx)将一个看起来像静态文件的 URL,重定向到真正的动态脚本 plus/list.php

  • 以 Nginx 为例: 在你的 Nginx 配置文件中,会有类似下面这样的规则:
    # DedeCMS 伪静态规则
    rewrite "^/seohtml/([0-9]+)\.html$" /plus/list.php?tid=$1 last;
    rewrite "^/seohtml/([0-9]+)_(+)\.html$" /plus/list.php?tid=$1&PageNo=$2 last;
    • rewrite "^/seohtml/([0-9]+)\.html$": 匹配 https://www.yourdomain.com/seohtml/2.html 这样的 URL。
    • /plus/list.php?tid=$1: 将匹配到的 URL 重写为 plus/list.php?tid=2
    • last: 停止处理当前的 rewrite 规则,并开始搜索匹配的新 location。

总结一下流程:

  1. DedeCMS 根据你在“栏目管理”中设置的规则(如 {tid}/index.html),生成一个“虚拟”的链接。
  2. 浏览器请求这个“虚拟”链接(如 seohtml/2.html)。
  3. 服务器的 URL 重写规则捕获到这个请求,并将其“翻译”成 DedeCMS 能理解的动态脚本请求(plus/list.php?tid=2)。
  4. DedeCMS 执行 plus/list.php,获取 tid=2 的栏目内容,并生成最终的 HTML 页面返回给浏览器。

如何修改列表页的链接形式?

从动态链接改为伪静态链接

这是最常见的操作,目的是提升 SEO 和用户体验。

  1. 修改栏目设置:

    • 进入「栏目管理」,编辑你想要修改的栏目。
    • 在“列表命名规则”中,输入你想要的伪静态格式,
      • {tid}/list.html (会生成 栏目目录/栏目ID/list.html)
      • {tid}/index.html (默认格式)
      • category/{tid}.html (自定义目录名)
    • 点击“保存”。
  2. 设置服务器伪静态规则:

    • Nginx 用户: 将以下代码添加到你的 Nginx 配置文件中(通常在 server 块内),然后重载 Nginx 配置 (nginx -s reload)。

      location ~* ^/plus/list-([0-9]+)\.html$ {
          rewrite ^/plus/list-([0-9]+)\.html$ /plus/list.php?tid=$1 last;
      }
      location ~* ^/category/([0-9]+)\.html$ {
          rewrite ^/category/([0-9]+)\.html$ /plus/list.php?tid=$1 last;
      }
      # 分页规则
      location ~* ^/category/([0-9]+)_(+)\.html$ {
          rewrite ^/category/([0-9]+)_(+)\.html$ /plus/list.php?tid=$1&PageNo=$2 last;
      }

      注意:规则中的 /category/ 需要和你在栏目命名规则中设置的目录名保持一致。

    • Apache 用户 (.htaccess): 在网站根目录下编辑 .htaccess 文件,添加以下代码:

      <IfModule mod_rewrite.c>
        RewriteEngine On
        # 列表页伪静态
        RewriteRule ^plus/list-([0-9]+)\.html$ /plus/list.php?tid=$1
        RewriteRule ^category/([0-9]+)\.html$ /plus/list.php?tid=$1
        # 分页页伪静态
        RewriteRule ^category/([0-9]+)_(+)\.html$ /plus/list.php?tid=$1&PageNo=$2
      </IfModule>
  3. 更新全站缓存: 在后台更新“HTML 页面”和“栏目链接”,确保所有链接都按照新规则生成。

修改现有伪静态链接的目录名

想把 seohtml 改成 news

  1. 修改栏目设置:

    • 进入「栏目管理」,编辑所有栏目。
    • 将“列表命名规则”从 {tid}/index.html 修改为 news/{tid}.html
    • 保存所有栏目。
  2. 修改服务器伪静态规则:

    • Nginx: 将规则中的 /seohtml/ 全部替换为 /news/
    • Apache (.htaccess): 将规则中的 /seohtml/ 全部替换为 /news/
  3. 处理旧链接(301重定向):

    • 为了避免 SEO 流失,你需要将旧的 seohtml 链接 301 重定向到新的 news 链接。
    • Nginx 示例:
      # 将旧的 seohtml 目录重定向到新的 news 目录
      rewrite "^/seohtml/([0-9]+)\.html$" /news/$1.html permanent;
      rewrite "^/seohtml/([0-9]+)_(+)\.html$" /news/$1_$2.html permanent;
    • Apache (.htaccess) 示例:
      # 将旧的 seohtml 目录重定向到新的 news 目录
      RedirectMatch 301 ^/seohtml/([0-9]+)\.html$ /news/$1.html
      RedirectMatch 301 ^/seohtml/([0-9]+)_(+)\.html$ /news/$1_$2.html

常见问题与解决方案

问题1:设置了伪静态,但打开链接是 404 Not Found。

  • 原因: 最常见的原因是服务器没有配置 URL 重写规则。
  • 解决方案:
    1. 确认你的服务器是 Apache 还是 Nginx。
    2. 检查 .htaccess (Apache) 或 Nginx 配置文件中的伪静态规则是否正确添加。
    3. 确认规则中的目录名(如 seohtml)是否与你在 DedeCMS 中设置的“列表命名规则”完全一致。
    4. 修改配置后,务必重启或重载服务器配置。

问题2:列表页链接混乱,有的带 index.html,有的不带。

  • 原因: 不同栏目使用了不同的“列表命名规则”,或者系统默认规则和自定义规则混用。
  • 解决方案:
    1. 进入「栏目管理」,检查所有栏目的“列表命名规则”,确保它们是统一的。
    2. 如果想统一修改,可以批量选中栏目,然后进行编辑,但 DedeCMS 后台不支持批量修改此项,可能需要通过数据库直接操作(风险较高,不推荐新手)或使用一些第三方工具。

问题3:修改了链接后,旧的外部链接失效了。

  • 原因: 这是正常的,链接结构改变必然会导致旧链接失效。
  • 解决方案:
    1. 设置 301 重定向: 如上面“场景二”中所述,将旧链接 301 重定向到新链接,这是最规范的做法,能将 SEO 权重传递给新链接。
    2. 联系外部网站: 如果可能,通知交换友情链接或引用了你网站链接的站长,让他们更新链接地址。

希望这份详细的指南能帮助你完全理解并掌握 DedeCMS 列表页链接的配置!

-- 展开阅读全文 --
头像
织梦留言板如何调用头部文件?
« 上一篇 04-19
织梦文章敏感词如何高效检测与处理?
下一篇 » 04-19

相关文章

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

目录[+]