织梦伪静态后为何不能翻页?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 织梦建站 正文

问题根源分析

织梦的分页链接默认格式是动态的, /plus/list.php?tid=1&PageNo=2

织梦伪静态后不能翻页
(图片来源网络,侵删)

开启伪静态后,我们希望它变成类似这样的格式: /plus/list-1-2.html

当你在服务器上配置了Rewrite规则,将 list-1-2.html 这样的请求正确地转发给 plus/list.php 时,织梦程序需要能够识别这个链接,并从中解析出 tid=1PageNo=2 这两个关键参数。

问题的核心就在于:

  1. 服务器Rewrite规则:是否正确地将 list-{tid}-{PageNo}.html 解析为 plus/list.php?tid={tid}&PageNo={PageNo}
  2. 织梦程序:是否知道如何生成 list-{tid}-{PageNo}.html 这样的链接,并且能正确解析这种格式的URL参数?

通常情况下,问题出在服务器Rewrite规则上,或者两者之间的匹配参数上。

织梦伪静态后不能翻页
(图片来源网络,侵删)

解决方案(请按顺序尝试)

第一步:检查并修改织梦后台分页设置

这是最基础的一步,确保织梦本身开启了伪静态分页。

  1. 登录织梦DedeCMS后台。
  2. 进入 “系统” -> “系统基本参数” -> “核心设置”
  3. 找到 “是否使用伪静态” 这个选项,确保它被设置为 “是”
  4. 保存设置。

注意: 仅仅设置这里是不够的,它只是告诉织梦“请为我生成伪静态链接”,但具体怎么生成,还需要修改模板文件。

第二步:修改列表页模板文件,生成正确的伪静态链接

织梦默认的分页代码是动态的,你需要手动修改模板文件来让它生成静态格式的链接。

  1. 找到你的列表页模板文件,通常位于 /templets/你的模板名称/list_articled.htm
  2. 用代码编辑器打开这个文件。
  3. 找到织梦的分页标签,通常是 dede:pagelist
  4. 关键修改:在 dede:pagelist 标签内,增加一个 listitem 属性,明确告诉织梦你需要显示哪些分页元素,并确保它生成的是静态链接。

修改前的代码可能类似这样:

织梦伪静态后不能翻页
(图片来源网络,侵删)
<div class="dede_pages">
    <ul class="pagelist">
        {dede:pagelist listsize="4" listitem="info,index,end,pre,next,pageno"}
        {/dede:pagelist}
    </ul>
</div>

修改后的代码(推荐):

<div class="dede_pages">
    <ul class="pagelist">
        {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="4"}
        {/dede:pagelist}
    </ul>
</div>

listitem 参数说明:

  • info: 显示总页数、总条数等信息。
  • index: 显示首页链接。
  • pre: 显示上一页链接。
  • next: 显示下一页链接。
  • pageno: 显示页码。
  • end: 显示尾页链接。

通过设置 listitem,织梦会尝试生成与后台“是否使用伪静态”设置相匹配的链接,如果后台设置为“是”,它就会生成 list-1-2.html 这样的链接。

第三步:配置服务器Rewrite规则(最关键的一步)

这是解决问题的核心,你需要根据你的服务器环境,选择对应的Rewrite规则,并确保它正确无误。

重要提示:

  • Nginx:将规则放入 nginx.conf 文件中的 server 块,或者放入网站根目录下的 .conf 文件中。
  • Apache:将规则保存为 .htaccess 文件,并上传到网站根目录。
  • IIS:将规则保存为 web.config 文件,并上传到网站根目录。

方案A:Apache服务器 (.htaccess)

在你的网站根目录下,确保存在 .htaccess 文件,并添加以下规则:

# 织梦DedeCMS伪静态规则
RewriteEngine On
# 如果请求的是真实存在的文件或目录,则直接访问
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# 处理列表页
RewriteRule ^plus/list-([0-9]+)-([0-9]+)\.html$ /plus/list.php?tid=$1&PageNo=$2 [L]
# 处理文章页
RewriteRule ^plus/view-([0-9]+)-([0-9]+)\.html$ /plus/view.php?arcID=$1 [L]

规则解释:

  • RewriteEngine On:开启Rewrite引擎。
  • RewriteCond ...:条件判断,如果不是真实文件或目录,才进行重写,避免影响真实文件访问。
  • RewriteRule ...:核心重写规则。
    • ^plus/list-([0-9]+)-([0-9]+)\.html$:匹配 list-数字-数字.html 这样的URL。
    • ([0-9]+) 是一个正则表达式,用于捕获 tidPageNo 的值。
    • /plus/list.php?tid=$1&PageNo=$2:将捕获到的值($1是第一个tid$2是第二个PageNo)作为参数,重写为动态URL。
    • [L]:Last Rule,表示匹配到这条规则后就停止,不再匹配后续规则。

方案B:Nginx服务器 (nginx.conf)

在Nginx的配置文件(通常是 nginx.conf 或站点配置文件)的 server 块中添加以下规则:

# 织梦DedeCMS伪静态规则
rewrite "^/plus/list-([0-9]+)-([0-9]+)\.html$" /plus/list.php?tid=$1&PageNo=$2 last;
rewrite "^/plus/view-([0-9]+)-([0-9]+)\.html$" /plus/view.php?arcID=$1 last;

规则解释:

  • rewrite:Nginx的指令。
  • "^/plus/list-([0-9]+)-([0-9]+)\.html$":匹配URL。
  • /plus/list.php?tid=$1&PageNo=$2:重写目标。
  • last:表示在本location中完成重写,并停止继续匹配rewrite规则。

方案C:IIS服务器 (web.config)

在网站根目录下创建 web.config 文件,并添加以下内容:

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

第四步:检查并修改 arc.listview.class.php 文件(高级/备用方案)

如果以上方法都无效,可能是织梦程序在生成分页链接时,没有正确处理你的自定义规则,这时可以直接修改核心文件。

  1. 找到文件 /include/arc.listview.class.php
  2. 用代码编辑器打开,搜索 GetPageListST 函数。
  3. 在这个函数里,找到生成上一页、下一页、页码链接的代码段,修改 $this->GetCurUrl() 的调用方式,确保它生成的URL符合你的伪静态规则。
  4. 这一步风险较高,建议修改前备份原文件,通常情况下,第三步的Rewrite规则已经足够,无需修改此文件。

总结与排查清单

当遇到织梦伪静态后不能翻页时,请按以下清单逐一排查:

  1. 后台设置:系统 -> 系统基本参数 -> 核心设置 -> “是否使用伪静态” = “是”
  2. 模板修改:列表页模板 (list_xxx.htm) 中的 {dede:pagelist} 标签,确保 listitem 属性设置正确。
  3. Rewrite规则
    • 确认服务器环境:是 Apache, Nginx 还是 IIS?
    • 检查规则文件.htaccess (Apache), nginx.conf (Nginx), web.config (IIS) 是否存在于网站根目录?
    • 检查规则内容:规则是否完全复制正确?特别是正则表达式部分。
  4. 清除缓存:修改完任何文件后,都请清除浏览器缓存和织梦后台的缓存。
  5. 检查服务器日志:如果规则仍然无效,请查看服务器的错误日志(如 Nginx 的 error.log,Apache 的 error_log),它会告诉你请求是如何被处理的,以及为什么失败,可能会提示404 Not Found,说明Rewrite规则没有生效,或者重写后的目标文件不存在。

按照这个流程,90%以上的织梦伪静态分页问题都可以得到解决,如果问题依旧,请提供你的服务器环境、使用的Rewrite规则以及具体的错误现象,以便进一步定位问题。

-- 展开阅读全文 --
头像
C语言socket实例如何实现通信连接?
« 上一篇 今天
dede文章如何实现跳转到指定页面?
下一篇 » 今天

相关文章

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

目录[+]