迅睿CMS 伪静态配置与 404 排查

· 迅睿CMS · 阅读 5
摘要

先说结论迅睿CMS 伪静态 404 基本都是三件事之一:规则没引入、规则与目录不匹配、伪静态优先级被其他 location 抢走。按顺序排查,10 分钟内能定位。一、Nginx 规则写法在站点配置文件的 server 块中加入(放在 loc

先说结论

迅睿CMS 伪静态 404 基本都是三件事之一:规则没引入、规则与目录不匹配、伪静态优先级被其他 location 抢走。按顺序排查,10 分钟内能定位。

一、Nginx 规则写法

在站点配置文件的 server 块中加入(放在 location / 之前):

location / {
    if (!-e $request_filename) {
        rewrite ^/(.*)$ /index.php?s=$1 last;
    }
}

若站点在子目录,需相应调整前缀。

二、Apache 规则写法

在站点根目录的 .htaccess 中:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]

注意:Apache 需确认 mod_rewrite 已启用,且目录配置里 AllowOverride All。

三、404 排查清单

现象可能原因处理
首页正常,内页全 404伪静态规则未生效检查规则位置,重载 Nginx
部分栏目 404栏目别名与目录冲突改别名或调整规则顺序
后台正常,前台 404后台未开启伪静态开关后台 → 系统设置 → URL 模式
图片、CSS 也 404规则把静态资源也重写了加 if (!-e $request_filename) 判断
改了规则仍 404Nginx 未 reloadnginx -t && nginx -s reload

四、验证方法

  1. 命令行:curl -I https://你的域名/栏目别名/,看返回码是 200 还是 404;
  2. 直接访问 index.php?s=栏目别名,若能打开,说明是伪静态问题而不是程序问题;
  3. 查看 Nginx 错误日志 error.log,确认是否命中 rewrite。

五、反向代理场景的坑

若站前有 CDN 或宝塔反代,真实 IP 与协议头可能丢失,导致程序生成错误 URL。需在 Nginx 中补:

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;

总结

伪静态问题的核心是先分清「程序问题」还是「服务器问题」。用 index.php?s=xxx 直连测试法,能一秒区分这两类,避免盲目改规则。