ZBlogCMS Nginx 伪静态规则怎么写

juming
juming 正式会员超兽战士
发布于 2026-10-07 07:33 ·1 浏览 ·0 回复

照着这篇做完,你能在 Nginx 上把 ZBlogPHP 的伪静态跑通,文章地址从 /?id=1 变成 /post/1.html 这类形式,并且知道规则里每一行在干什么、出问题该查哪里。

第一步:先在 ZBlogPHP 后台把官方规则复制出来

这一步是拿到 ZBlogPHP 自己认可的那份规则,避免手写漏行。登录后台(默认地址 https://你的域名/zb_system/login.php),左侧菜单点「网站设置」→「静态化管理」。页面上的「伪静态规则」下拉框里选 Nginx,下面的文本框会显示一段 Nginx 规则,把它整段复制下来,然后点页面底部的「保存」。

注意:这一步必须点保存。规则只是告诉 Nginx 怎么转发请求,真正决定 URL 长什么样(是 /post/1.html 还是 /archives/1)的是这个后台设置,两边不一致会出现「规则对了但链接 404」。

第二步:找到 Nginx 的站点配置文件

这一步是确定规则该写到哪个文件里。按你的环境对号入座:

  • 宝塔面板:面板左侧「网站」→ 点你的站点名右边的「设置」→ 弹窗里选「伪静态」标签页,页面中间就是一个规则文本框。
  • LNMP 一键包:/usr/local/nginx/conf/vhost/你的域名.conf
  • Debian/Ubuntu 的 apt 安装:/etc/nginx/sites-available/你的域名.conf(或直接在 /etc/nginx/conf.d/ 下新建 zblog.conf)
  • 源码编译:/usr/local/nginx/conf/nginx.conf 里的 server {} 段

注意:站点根目录 root 要指向 ZBlogPHP 的根目录,也就是同时能看到 index.php 和 zb_users 文件夹的那一级。指到子目录是最常见的 404 原因。

第三步:把规则写进 server 块

这一步是真正让规则生效的编辑动作。宝塔面板只需要把第一步复制的内容粘进「伪静态」文本框,点「保存」即可,宝塔已经帮你写好了 PHP 解析部分。

自己维护 Nginx 的话,在 server {} 里写完整内容:

server {
    listen 80;
    server_name www.example.com;
    root /www/wwwroot/zblog;
    index index.php index.html index.htm;

    location / {
        if (-f $request_filename/index.html) {
            rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename/index.php) {
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename) {
            rewrite (.*) /index.php;
        }
    }

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;   # 宝塔用户请改用 include enable-php-74.conf;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

三段 if 的含义:目录下已有现成的 index.html 就交给它;有 index.php 就交给 PHP;两者都没有,就把请求统一甩给 /index.php,由 ZBlogPHP 自己解析路由。

注意:location / 必须写在 server {} 内部,写到 http {} 里或者文件末尾都会让 Nginx 启动失败。另外别把 include fastcgi_params; 的顺序调换到 fastcgi_param SCRIPT_FILENAME 之前,否则你的自定义参数会被覆盖,表现为访问任何页面都返回「File not found」。

第四步:测试语法并重载

这一步是让改动真正加载进内存。在服务器上执行:

nginx -t          # 显示 syntax is ok / test is successful 才算通过
systemctl reload nginx    # 或 nginx -s reload

宝塔面板在「伪静态」页点保存时已经自动做了这步,不用手动执行。

注意:只 nginx -t 不 reload,规则不会生效,很多人卡在这里反复改配置却看不到变化。如果 nginx -t 报错,先别 reload,按报错行号改回原样再试。

第五步:验证是否真的伪静态成功

这一步是确认结果。浏览器打开一篇文章,看地址栏是不是 https://你的域名/post/1.html 这种形式,而不是带 ?id= 的。能正常打开、样式图片都正常,就说明成功。

出问题时按现象排查:

  • 整站 404:root 指错目录,或重载没生效。
  • 首页正常、文章页 404:后台「静态化管理」的 URL 形式没保存,或规则没粘全。
  • 后台进不去:检查 zb_system 目录权限是 755、属主是 PHP 运行用户。

小结

  • 规则从 ZBlogPHP 后台「网站设置 → 静态化管理」复制,选 Nginx,复制完记得保存。
  • 宝塔面板在「网站 → 设置 → 伪静态」粘贴;自建环境写进 server {} 块。
  • location / 里的三条 if 分别处理现成 HTML、现成 PHP、其余交给 index.php。
  • 改完必须 nginx -t 检查、systemctl reload nginx 重载才算生效。
  • 排查顺序固定:根目录对不对 → 规则粘全没 → 重载了没 → 目录权限对不对。
版权声明:本文来自 GJ论坛《ZBlogCMS Nginx 伪静态规则怎么写》
原文链接:https://www.gj0.com/thread-158.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~