核心思想
DedeCMS 列表页的伪静态,本质上是将动态的 URL(如 plus/list.php?tid=1)通过服务器重写规则,伪装成静态的 URL(如 plus/list-1.html)。
这个过程主要涉及两个部分:
- DedeCMS 后台设置:告诉系统你要生成什么样的链接格式。
- Web 服务器配置:当用户访问伪静态 URL 时,服务器能正确地将其转发给
plus/list.php来处理。
第一步:DedeCMS 后台设置
这是最基础也是最关键的一步,你需要修改系统参数,让 DedeCMS 在生成列表页链接时使用你自定义的格式。
-
登录 DedeCMS 后台。
-
进入 系统 -> 系统基本参数。
-
在左侧菜单中找到并点击 核心设置。
-
找到以下两个参数并进行修改:
-
(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。
-
-
保存设置。
第二步:修改列表页模板文件
为了让首页、栏目页等地方的“更多”链接或分页链接指向新的伪静态地址,你需要修改相关的模板文件。
-
修改首页/栏目页的列表链接
- 打开你的首页模板文件
index.htm或栏目列表模板list_article.htm。 - 找到调用列表的链接,通常是这样的形式:
<a href='{dede:field name='typeurl'/}'>查看更多</a> - 无需修改。
{dede:field name='typeurl'/}这个标签会自动读取你在“核心设置”里配置的“列表命名规则”,所以它会自动生成list-{tid}-{page}.html这样的链接。
- 打开你的首页模板文件
-
修改分页代码
- 在列表模板文件中,找到分页代码,它通常是这样的:
{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文件中,并确保它位于网站根目录(与dede、data等文件夹同级)。<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分别对应第一个和第二个括号里匹配到的内容(即tid和PageNo)。
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>
第四步:更新和测试
完成以上配置后,你需要执行最后几步来使配置生效。
-
更新栏目缓存:
- 在 DedeCMS 后台,进入 系统 -> SQL命令工具。
- 在命令框中输入:
UPDATE dede_arctype SET isdefault=-1;(注意:dede_是你的表前缀,如果不是请修改)。 - 点击“查询”,这一步的目的是强制系统重新读取栏目信息,以确保新的链接规则被应用。
-
生成 HTML:
- 进入 生成 -> 更新栏目HTML。
- 勾选你想要更新的栏目,然后点击“开始生成”,这会重新生成列表页,使其链接符合新的伪静态规则。
-
重启 Web 服务器:
- Apache:重启 Apache 服务。
- Nginx:执行
nginx -s reload命令来重新加载配置。 - IIS:在 IIS 管理器中,选择你的网站,点击“停止”,然后再点击“启动”。
-
最终测试:
- 清除浏览器缓存。
- 访问你的列表页,查看页面源码,检查链接是否已经变成了你设置的伪静态格式(如
list-1-1.html)。 - 点击分页链接,看是否能正常跳转到下一页。
- 确保所有列表页的链接都已更新。
常见问题排查 (FAQ)
-
Q: 设置后,页面打不开了,或者 404 错误。
- A: 这通常是服务器重写规则没有生效或写错了。
- 检查规则:仔细核对
.htaccess(Apache)、nginx.conf(Nginx) 或web.config(IIS) 中的规则,确保语法正确。 - 检查模块:确保 Apache 的
mod_rewrite已启用。 - 检查路径:确保重写规则中指向的
plus/list.php路径是正确的。 - 检查权限:确保
.htaccess文件(如果存在)有正确的执行权限。
- 检查规则:仔细核对
- A: 这通常是服务器重写规则没有生效或写错了。
-
Q: 链接还是动态的,没有变成伪静态。
- A: 这说明 DedeCMS 后台设置没有生效。
- 检查后台设置:确认“核心设置”中的“列表命名规则”是否已修改并保存。
- 更新缓存:务必执行“更新栏目缓存”的 SQL 命令。
- 重新生成:重新生成列表页 HTML。
- A: 这说明 DedeCMS 后台设置没有生效。
-
Q: 首页/其他页面的列表链接没有更新。
- A: 检查并修改对应的模板文件中的
{dede:field name='typeurl'/}标签,确保它指向的是列表页,通常这个标签是自动适应的,如果不行,可以直接硬编码为[field:typelink/]或检查模板调用。
- A: 检查并修改对应的模板文件中的
按照以上步骤,你应该就能成功地为你的 DedeCMS 网站设置好列表页的伪静态了,祝你成功!
