dede 列表页伪静态

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

核心思想

DedeCMS 列表页的伪静态,本质上是将动态的 URL(如 plus/list.php?tid=1)通过服务器重写规则,伪装成静态的 URL(如 plus/list-1.html)。

这个过程主要涉及两个部分:

  1. DedeCMS 后台设置:告诉系统你要生成什么样的链接格式。
  2. Web 服务器配置:当用户访问伪静态 URL 时,服务器能正确地将其转发给 plus/list.php 来处理。

第一步:DedeCMS 后台设置

这是最基础也是最关键的一步,你需要修改系统参数,让 DedeCMS 在生成列表页链接时使用你自定义的格式。

  1. 登录 DedeCMS 后台

  2. 进入 系统 -> 系统基本参数

  3. 在左侧菜单中找到并点击 核心设置

  4. 找到以下两个参数并进行修改:

    • (1) 文件命名规则

      • 说明:这个参数控制栏目、文章等页面的链接后缀。
      • 默认值{typedir}/{tid}_{page}.html
      • 建议修改为{typedir}/list-{tid}-{page}.html{typedir}/list-{page}.html
      • 解释
        • {typedir}:栏目目录。
        • {tid}:栏目 ID。
        • {page}:页码。
        • 这种命名方式可以清晰地表明这是一个列表页,并且包含了栏目 ID 和页码信息,非常利于 SEO 和管理。
    • (2) 列表命名规则

      • 说明:这个参数专门控制列表页的链接格式,是列表页伪静态的核心设置!
      • 默认值{typedir}/list_{tid}_{page}.html
      • 建议修改为{typedir}/list-{tid}-{page}.html (与上面保持风格一致,或直接使用默认值)
      • 解释:这里的规则将直接决定你伪静态的最终形态,对于栏目 ID 为 1 的列表页,第一页的链接就会是 /plus/list-1-1.html
  5. 保存设置


第二步:修改列表页模板文件

为了让首页、栏目页等地方的“更多”链接或分页链接指向新的伪静态地址,你需要修改相关的模板文件。

  1. 修改首页/栏目页的列表链接

    • 打开你的首页模板文件 index.htm 或栏目列表模板 list_article.htm
    • 找到调用列表的链接,通常是这样的形式:
      <a href='{dede:field name='typeurl'/}'>查看更多</a>
    • 无需修改{dede:field name='typeurl'/} 这个标签会自动读取你在“核心设置”里配置的“列表命名规则”,所以它会自动生成 list-{tid}-{page}.html 这样的链接。
  2. 修改分页代码

    • 在列表模板文件中,找到分页代码,它通常是这样的:
      {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/}
    • 同样无需修改{dede:pagelist} 标签也会自动根据你设置的规则来生成分页链接。

第三步:Web 服务器伪静态规则配置

这是实现伪静态最关键的一步,你需要根据你的服务器类型,添加相应的重写规则。

重要提示:修改服务器配置前,请务必备份你的配置文件!

Apache 服务器

如果你使用的是 Apache,你需要确保 mod_rewrite 模块已启用,然后在网站的根目录下创建或修改 .htaccess 文件。

  • 检查 mod_rewrite:在 httpd.conf 文件中找到 LoadModule rewrite_module modules/mod_rewrite.so,确保它没有被注释掉(即行首没有 )。

  • 创建或编辑 .htaccess 文件: 将以下代码粘贴到 .htaccess 文件中,并确保它位于网站根目录(与 dededata 等文件夹同级)。

    <IfModule mod_rewrite.c>
      RewriteEngine On
      # 伪静态规则开始
      # RewriteRule ^(.*)/list-([0-9]+)\.html$ $1/plus/list.php?tid=$2
      # RewriteRule ^(.*)/list-([0-9]+)-([0-9]+)\.html$ $1/plus/list.php?tid=$2&PageNo=$3
      # 更健壮的规则,可以处理各种情况
      RewriteRule ^plus/list-([0-9]+)\.html$ plus/list.php?tid=$1
      RewriteRule ^plus/list-([0-9]+)-([0-9]+)\.html$ plus/list.php?tid=$1&PageNo=$2
    </IfModule>

    代码解释

    • RewriteEngine On:开启重写引擎。
    • RewriteRule:定义一条重写规则。
    • ^plus/list-([0-9]+)\.html$:匹配 URL 的模式。^ 表示开头, 表示结尾。([0-9]+) 是一个正则表达式,匹配一个或多个数字(即栏目 ID)。
    • plus/list.php?tid=$1&PageNo=$2:当匹配成功后,将请求转发到这个真实的动态地址。$1$2 分别对应第一个和第二个括号里匹配到的内容(即 tidPageNo)。

Nginx 服务器

如果你使用的是 Nginx,你需要修改 Nginx 的配置文件(通常是 nginx.conf 或你网站配置文件,如 yourdomain.com.conf)。

  • 找到 server 块:在你的网站配置中找到 server { ... } 部分。

  • 添加 rewrite 规则:在 server 块内部添加以下代码。

    server {
        # ... 其他配置 ...
        listen 80;
        server_name yourdomain.com;
        # ... 其他配置 ...
        # 伪静态规则开始
        location / {
            # ... 其他规则 ...
            if (!-e $request_filename) {
                rewrite "^/plus/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last;
                rewrite "^/plus/list-([0-9]+)-([0-9]+)\.html$" /plus/list.php?tid=$1&PageNo=$2 last;
            }
        }
        # ... 其他配置 ...
    }

    代码解释

    • location /:匹配所有请求。
    • if (!-e $request_filename):这是一个非常重要的条件,它表示“如果请求的文件或目录在服务器上真实不存在”,才执行重写,这可以避免对真实存在的静态文件(如图片、CSS)进行不必要的重写。
    • rewrite ... last;:执行重写,last 标志表示停止处理当前的 rewrite 规则集,并使用重写后的 URL 在一个 location 块中重新开始搜索。

IIS 服务器 (Web.config)

如果你使用的是 IIS 7.0 或更高版本,你需要创建一个 web.config 文件。

  • 在网站根目录下创建 web.config 文件,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="DedeCms List 1" stopProcessing="true">
              <match url="^plus/list-([0-9]+)\.html$" />
              <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
              <action type="Rewrite" url="plus/list.php?tid={R:1}" />
            </rule>
            <rule name="DedeCms List 2" stopProcessing="true">
              <match url="^plus/list-([0-9]+)-([0-9]+)\.html$" />
              <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
              <action type="Rewrite" url="plus/list.php?tid={R:1}&PageNo={R:2}" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>

第四步:更新和测试

完成以上配置后,你需要执行最后几步来使配置生效。

  1. 更新栏目缓存

    • 在 DedeCMS 后台,进入 系统 -> SQL命令工具
    • 在命令框中输入:UPDATE dede_arctype SET isdefault=-1; (注意:dede_ 是你的表前缀,如果不是请修改)。
    • 点击“查询”,这一步的目的是强制系统重新读取栏目信息,以确保新的链接规则被应用。
  2. 生成 HTML

    • 进入 生成 -> 更新栏目HTML
    • 勾选你想要更新的栏目,然后点击“开始生成”,这会重新生成列表页,使其链接符合新的伪静态规则。
  3. 重启 Web 服务器

    • Apache:重启 Apache 服务。
    • Nginx:执行 nginx -s reload 命令来重新加载配置。
    • IIS:在 IIS 管理器中,选择你的网站,点击“停止”,然后再点击“启动”。
  4. 最终测试

    • 清除浏览器缓存。
    • 访问你的列表页,查看页面源码,检查链接是否已经变成了你设置的伪静态格式(如 list-1-1.html)。
    • 点击分页链接,看是否能正常跳转到下一页。
    • 确保所有列表页的链接都已更新。

常见问题排查 (FAQ)

  • Q: 设置后,页面打不开了,或者 404 错误。

    • A: 这通常是服务器重写规则没有生效或写错了。
      1. 检查规则:仔细核对 .htaccess (Apache)、nginx.conf (Nginx) 或 web.config (IIS) 中的规则,确保语法正确。
      2. 检查模块:确保 Apache 的 mod_rewrite 已启用。
      3. 检查路径:确保重写规则中指向的 plus/list.php 路径是正确的。
      4. 检查权限:确保 .htaccess 文件(如果存在)有正确的执行权限。
  • Q: 链接还是动态的,没有变成伪静态。

    • A: 这说明 DedeCMS 后台设置没有生效。
      1. 检查后台设置:确认“核心设置”中的“列表命名规则”是否已修改并保存。
      2. 更新缓存:务必执行“更新栏目缓存”的 SQL 命令。
      3. 重新生成:重新生成列表页 HTML。
  • Q: 首页/其他页面的列表链接没有更新。

    • A: 检查并修改对应的模板文件中的 {dede:field name='typeurl'/} 标签,确保它指向的是列表页,通常这个标签是自动适应的,如果不行,可以直接硬编码为 [field:typelink/] 或检查模板调用。

按照以上步骤,你应该就能成功地为你的 DedeCMS 网站设置好列表页的伪静态了,祝你成功!

-- 展开阅读全文 --
头像
织梦后台文章打不开,咋回事?
« 上一篇 今天
dede列表页如何调用自定义字段?
下一篇 » 今天

相关文章

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

目录[+]