问题现象:后台开启伪静态后,前台首页、栏目页或文章页出现 404,而兼容模式(带问号地址)正常。本文按概率从高到低列出原因与解法。
一、未配置服务器重写规则(最常见)
开启后台伪静态开关后,必须同步配置服务器重写规则,二者缺一不可。
Nginx:在站点配置中加:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}Apache:确认源码包 .htaccess 存在且生效(虚拟主机需开启 AllowOverride All):
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?p=$1 [QSA,PT,L]二、Nginx 的 try_files 与伪静态规则冲突
部分环境(如宝塔默认配置)已存在 try_files 规则,与 PbootCMS 规则叠加会冲突。检查站点配置,删除冲突的 rewrite 行,只保留一套。修改后记得 nginx -s reload 重载。
三、伪静态规则放在错误的位置
PbootCMS 规则必须放在 location / 块内,而不是 location ~ .php 块内。放在错误位置会导致所有页面 404 或 500。
四、缓存未清理
开启伪静态后,之前缓存中可能存有兼容模式的链接。处理:
后台「缓存管理 - 清除缓存」
或删除
runtime/目录下的缓存文件
五、模板中硬编码了旧链接
检查模板是否有写死的带问号地址,如 。应改用标签动态输出:{pboot:sitepath}/about/。
六、部分页面 404、部分正常
通常是栏目别名或文章别名冲突,或对应栏目/文章状态为隐藏/未发布。到后台检查该栏目的「状态」和「隐藏」设置。
七、快速排查清单
后台伪静态开关已开启?
服务器重写规则已配置并重载?
规则是否位于 location / 内且无冲突?
缓存已清理?
单页/栏目状态为正常发布?
按此顺序排查,90% 的伪静态 404 都能解决。仍无法解决时,可暂时关闭伪静态开关回到兼容模式应急,再逐项排查。