伪静态失效与 404、301 异常

分类:常见问题 · 更新于 2026-11-05 · 约 1443 字

详情页 404、http 不跳 https、不带 www 不跳转的自查与修复,含 Nginx 伪静态与 301 规则。

一、现象与判断

  • 首页正常,但 /bendi/12.html、分类短码 /fc/ 等地址打开返回 404;
  • 已配 HTTPS,访问 http:// 却不自动跳到 https://;
  • 访问不带 www 的域名不会跳转到带 www;
  • 自定义 404 页面不生效。

先分清是“伪静态没生效”还是“这个内容本身不存在”。把地址改成 index.php?__route=/bendi/12.html 直接访问:若能打开,说明数据存在、问题出在伪静态规则;若仍是 404,则内容或路由本身有问题。

二、检查伪静态

本系统走 index.php 单入口,由 config/routes.php 决定路由,Nginx 负责把不存在的路径交给入口文件:

location / {
    try_files $uri /index.php?__route=$uri&$args;
}

在宝塔面板的「网站 → 你的站点 → 伪静态」中粘贴规则并保存,或让站点配置引入规则文件,改完先测试再重载:

nginx -t && nginx -s reload

规则未生效的常见原因:根本没有配置伪静态、保存后没有重载 Nginx、把规则放到了别的站点、root 指向的不是站点根目录(应为 /www/wwwroot/你的域名)。

三、404 的其它来源

  1. 分类目录短码被改过,或分类已被删除,旧地址自然 404;
  2. 内容已过期删除,但搜索引擎仍保留旧链接;
  3. 站点对 /data/、/install/、/docs/、/config/ 等内部目录做了访问拦截,直接访问这些路径返回 404 或 403 属于预期行为。

四、301 跳转不生效

旧教程里的 web.config 规则在 Nginx 上无效,应写到站点配置中。http 强制跳 https:

server {
    listen 80;
    server_name 你的域名 www.你的域名;
    return 301 https://$host$request_uri;
}

不带 www 跳带 www(写在 443 的 server 块内):

if ($host = '你的域名') {
    return 301 https://www.你的域名$request_uri;
}

多个旧域名统一跳到主域时,可用一条 server_name 列出全部域名再 return 301,比逐条 rewrite 更好维护。

五、自定义 404 页面

在站点配置中指定错误页并交给入口处理:

error_page 404 /index.php?__route=/404;

配好后用命令核对状态码:

curl -I http://你的域名/bendi/999999.html
curl -I http://你的域名
提示:301 是永久跳转,会被浏览器和搜索引擎长期缓存。规则没确认好之前先用 302 测试,避免改错后长期难以回退。

六、快速自查清单

  1. 访问 /data/、/install/、/docs/、/config/ 这类内部目录返回 404 或 403,是访问拦截在生效,属预期行为;
  2. 伪静态规则是否粘贴到本站点,保存后是否执行过 nginx -t 与重载;
  3. root 是否指向 /www/wwwroot/你的域名,index.php 是否位于站点根目录;
  4. 301 是否只跳一次、目标的协议与域名是否与证书一致,避免跳转链;
  5. 改完用 curl -I 复核状态码,再提交搜索引擎更新收录。

相关教程

文档对不上实际界面?可在常见问题中查找排查步骤,或按「安装部署」中的环境要求核对版本。