伪静态的主要作用是将动态的 URL(如 plus/list.php?tid=1)转换为静态或看似静态的 URL(如 /plus/list-1.html),这有助于 提升用户体验、有利于搜索引擎优化(SEO),并能隐藏网站的技术细节。
第一步:理解 DedeCMS 的 Nginx 伪静态规则
DedeCMS 的官方提供了一套标准的 Nginx 伪静态规则,这套规则主要处理以下几个核心模块的 URL 重写:
- 栏目列表页:
plus/list.php->/plus/list-{栏目ID}.html - 页:
plus/view.php->/plus/view-{文章ID}.html - 自定义页面:
plus/list.php?tid={自定义栏目ID}->/plus/list-{自定义栏目ID}.html - 搜索页面:
plus/search.php->/plus/search-{关键词}.html - 标签页面:
tags.php->/tags/{标签名}/
这是最常用、最核心的规则,下面我将提供两个版本:简洁版 和 完整版,对于绝大多数网站,简洁版就足够了。
第二步:获取伪静态规则代码
简洁核心版 (推荐)
这个版本包含了最基本和最常用的重写规则,足以让 DedeCMS 的核心功能正常伪静态。
location / {
if (!-e $request_filename) {
rewrite "^/plus/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last;
rewrite "^/plus/view-([0-9]+)\.html$" /plus/view.php?arcid=$1 last;
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&PageNo=$2 last;
rewrite "^/plus/list\.php\?tid=([0-9]+)$" /plus/list-$1.html last;
rewrite "^/plus/view\.php\?arcid=([0-9]+)$" /plus/view-$1.html last;
rewrite "^/plus/list\.php\?tid=([0-9]+)&PageNo=([0-9]+)$" /plus/list-$1-$2.html last;
rewrite "^/plus/view\.php\?arcid=([0-9]+)&PageNo=([0-9]+)$" /plus/view-$1-$2.html last;
rewrite "^/tags\.html$" /tags.php last;
rewrite "^/tags/([a-zA-Z0-9_-]+)$" /tags.php?/$1 last;
rewrite "^/tags/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$" /tags.php?/$1/$2 last;
}
}
完整增强版
这个版本包含了简洁版的所有规则,并额外增加了一些规则,如搜索、自定义页面(如 aboutus)等,功能更全面。
location / {
# 织梦核心伪静态规则
if (!-e $request_filename) {
rewrite "^/plus/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last;
rewrite "^/plus/view-([0-9]+)\.html$" /plus/view.php?arcid=$1 last;
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&PageNo=$2 last;
# 将动态链接转为伪静态,便于分享
rewrite "^/plus/list\.php\?tid=([0-9]+)$" /plus/list-$1.html last;
rewrite "^/plus/view\.php\?arcid=([0-9]+)$" /plus/view-$1.html last;
rewrite "^/plus/list\.php\?tid=([0-9]+)&PageNo=([0-9]+)$" /plus/list-$1-$2.html last;
rewrite "^/plus/view\.php\?arcid=([0-9]+)&PageNo=([0-9]+)$" /plus/view-$1-$2.html last;
# 标签(tags)伪静态
rewrite "^/tags\.html$" /tags.php last;
rewrite "^/tags/([a-zA-Z0-9_-]+)$" /tags.php?/$1 last;
rewrite "^/tags/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)$" /tags.php?/$1/$2 last;
# 搜索页面伪静态
rewrite "^/search\.html$" /plus/search.php last;
rewrite "^/search\.html\?keyword=(.*)$" /plus/search.php?keyword=$1 last;
# 自定义页面(单页面)伪静态
rewrite "^/([a-zA-Z0-9_-]+)\.html$" /plus/view.php?aid=$1 last;
}
}
第三步:在 Nginx 配置文件中应用规则
获取到规则后,你需要将它们应用到你的 Nginx 服务器配置中,主要有两种方法:
直接修改 Nginx 主配置文件 (适用于 VPS/独立服务器)
-
登录服务器,使用 SSH 连接到你的服务器。
-
找到网站配置文件,通常位于
/etc/nginx/sites-available/或/usr/local/nginx/conf/vhost/目录下,文件名通常是你的域名,如yourdomain.com.conf。 -
编辑配置文件,使用
vim或nano编辑器打开文件。sudo vim /etc/nginx/sites-available/yourdomain.com.conf
-
添加规则,在
server { ... }块内部,添加上面获取到的伪静态规则,一个完整的server块示例可能如下:server { listen 80; server_name yourdomain.com www.yourdomain.com; # 网站根目录 root /var/www/yourdomain.com; index index.php index.html index.htm; # 在这里添加 DedeCMS 伪静态规则 location / { if (!-e $request_filename) { rewrite "^/plus/list-([0-9]+)\.html$" /plus/list.php?tid=$1 last; rewrite "^/plus/view-([0-9]+)\.html$" /plus/view.php?arcid=$1 last; 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&PageNo=$2 last; # ... (将上面提供的完整规则粘贴到这里) } } # 处理 PHP 请求 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; # 或者 unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # 其他配置... } -
检查并重载 Nginx 配置。
- 检查语法:
sudo nginx -t- 如果显示
syntax is ok和test is successful,说明配置正确。
- 如果显示
- 重载配置:
sudo systemctl reload nginx或sudo nginx -s reload - 如果语法错误,请根据提示返回上一步修改配置文件。
- 检查语法:
使用 Nginx 配置文件 (适用于宝塔面板等)
如果你使用的是宝塔面板、AMH 等可视化管理面板,操作会非常简单。
- 登录宝塔面板。
- 进入 网站 列表,点击你想要配置的网站后面的 “设置”。
- 在弹出的设置窗口中,切换到 “伪静态” 标签页。
- 选择 DedeCMS,宝塔面板通常内置了主流程序的伪静态规则,直接在下拉菜单中选择 “DedeCMS” 即可,它会自动填充好完整的规则。
- 点击“保存”,宝塔会自动帮你应用配置并重启 Nginx 服务。
第四步:在 DedeCMS 后台开启伪静态
仅仅在 Nginx 上配置规则还不够,你还需要告诉 DedeCMS 本身也要使用伪静态链接。
- 登录 DedeCMS 后台 (
/dede/)。 - 进入 “系统” -> “系统基本参数”。
- 在左侧菜单选择 “核心设置”。
- 找到 “是否使用伪静态” 这个选项,将其值修改为 “是”。
- 点击 “保存” 按钮。
第五步:测试与验证
完成以上所有步骤后,伪静态就设置成功了,现在进行验证:
- 清除浏览器缓存 或使用无痕/隐私模式访问。
- 访问栏目列表页:检查原来的动态链接(如
http://yourdomain.com/plus/list.php?tid=1)是否能正常访问,URL 地址栏是否已经变成了伪静态的形式(如http://yourdomain.com/plus/list-1.html)。 - 访问文章内容页:同样检查,动态链接(
http://yourdomain.com/plus/view.php?aid=123)是否变成了http://yourdomain.com/plus/view-123.html。 - 检查网站地图(Sitemap):在后台生成网站地图,查看里面的链接是否都是
.html格式的。 - 检查搜索和标签页:确保这些功能也能正常使用。
如果一切正常,恭喜你,你的 DedeCMS 网站已经成功配置了 Nginx 伪静态!
常见问题排查
-
问题1:404 Not Found
- 原因:Nginx 规则未生效,或者文件/目录不存在。
- 排查:
- 确认 Nginx 配置文件是否正确保存并重载。
- 确认
plus/目录下的list.php,view.php,tags.php等文件是否存在。 - 检查网站目录的权限是否正确(通常是
755或750,文件权限是644)。
-
问题2:首页正常,但内页打不开
- 原因:通常是 DedeCMS 后台的“是否使用伪静态”选项没有设置为“是”。
- 排查:回到第四步,检查后台设置。
-
问题3:重定向循环 (Redirect Loop)
- 原因:Nginx rewrite 规则与服务器其他规则(如 WordPress 规则)冲突,或者规则本身有逻辑错误。
- 排查:检查你的 Nginx 配置文件,确保没有其他冲突的 rewrite 规则,可以先尝试使用最简单的规则进行测试。
希望这份详细的指南能帮助你顺利完成 DedeCMS 在 Nginx 上的伪静态配置!
