宝塔面板多站点伪静态配置错误,导致页面 404
宝塔面板多站点伪静态配置错误导致404?三步排查解决
在宝塔面板上运行多个网站时,偶尔会遇到某个站点突然跳转 404 页面,而其他站点正常。
这种 宝塔面板多站点伪静态配置错误,导致页面 404 的情况非常常见,尤其是在新增站点或切换网站程序后。
本文面向零基础用户,从现象到解决,手把手帮你恢复正常访问。
一、先确认 404 是不是伪静态的问题
在动手调整前,先做一个简单测试:访问一个不存在的地址(比如 http://你的域名/test-404-test),如果返回的 404 界面与正常页面一致(比如都显示同样的模板头部和底部),说明 Nginx/Apache 的伪静态规则正在生效,但规则本身不匹配你的程序。
如果 404 页面是服务器默认的空白或纯文本,则可能是伪静态功能根本没开启或规则被跳过。
小提示:先检查网站运行环境。
如果站点用的是 WordPress、ThinkPHP、Laravel 等框架,几乎都依赖伪静态来重写 URL。
一旦伪静态配置错误,所有内页都会返回 404。
二、在宝塔面板里检查并修正伪静态规则
1. 检查当前伪静态设置
登录宝塔面板,进入左侧“网站”菜单,找到出现 404 的站点,点击“设置”。
在弹出的窗口中,选择“伪静态”标签页。
- 如果下拉框显示“未设置”,或者选择了错误的类型(比如 WordPress 站点却选了 Typecho),就会引发 404。
- 正确做法:根据你的网站程序,从下拉列表中选择对应的规则。例如 WordPress 站点选
WordPress,ThinkPHP 选thinkphp。
2. 手动写入或校正规则
如果内置规则不适用,你也可以点击“开启”或“添加”按钮,直接在下方的编辑框中粘贴自定义规则。
下面给出两个最常用的规则示例,可以直接复制使用。
WordPress 伪静态规则(Nginx 环境)
location / {
try_files $uri $uri/ /index.php?$args;
}
ThinkPHP 5/6 伪静态规则(Nginx 环境)
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
粘贴后点击“保存”,系统会自动生成配置文件并重载服务。注意:如果使用的是 Apache 环境,请切换到 Apache 的 .htaccess 规则,具体可以咨询程序官方文档。
3. 重启 Web 服务
在面板首页点击“重启”按钮,选择“重启 Nginx”或“重启 Apache”。
这一步很关键,因为新规则只有重启后才会生效。
三、多站点冲突排查与避坑要点
多个站点共用同一服务器时,伪静态规则可能互相干扰。
以下两个高频坑要特别留意:
- 规则顺序冲突:在宝塔面板中,每个站点的规则是独立的,但如果你在全局 Nginx 配置文件中添加了伪静态规则(比如在“配置修改”里手动改了
http块),可能会覆盖站点的单独设置。建议:每个站点的伪静态都只在站点设置里配置,不要动全局文件。 - 伪静态类型不匹配:比如同一台服务器上运行 WordPress 和 Discuz,两种程序对
.htaccess的规则格式完全不一样,误用会导致 404。务必按程序类型单独选择。 - 规则中未排除已存在的文件:例如 ThinkPHP 规则中如果没有
!-e $request_filename判断,访问真实存在的图片或 JS 文件也会被 rewrite 到 index.php,造成 404。上面提供的规则已包含判断,直接复制即可。
四、验证修复效果
保存规则并重启服务后,立即打开浏览器访问之前报 404 的页面地址。
如果正常显示内容,问题解决。
为了彻底确认,再访问一个不存在的 URL(如 http://你的域名/random-test-xyz),应当返回程序自定义的 404 页面(而不是服务器默认 404)。
额外验证方法:
登录宝塔面板,
进入“软件商店” -> “已安装” -> 找到 Nginx(或 Apache),
点击“设置” -> “错误日志”,
搜索 404,
如果看到 rewrite or internal redirection cycle 或 no file found 等记录,
说明规则仍然有问题,
需要回到第二步检查规则语法或顺序。
五、常见高频问题解答
- WordPress 开启了伪静态,文章页还是 404?
- 进入 WordPress 后台 -> 设置 -> 固定链接,再次点击“保存设置”,这会让 WordPress 重新写入
.htaccess(Apache)或刷新路由表(Nginx)。如果宝塔面板中的伪静态规则已经选择正确,此操作即可修复。
- ThinkPHP 站点除了首页都 404?
- 确认 Nginx 规则是否正确包含
if (!-e $request_filename)和rewrite ^(.*)$ /index.php?s=/$1 last;。同时检查public/index.php文件是否存在。
- 宝塔面板里未找到对应的伪静态模板怎么办?
- 点击“自定义”或“手动输入”,从程序官方文档复制规则粘贴即可。几乎所有主流框架的伪静态规则都可在其手册中找到。
如果你正在处理 宝塔面板多站点伪静态配置错误,导致页面 404,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。