ZBlogCMS Nginx 伪静态规则怎么写
照着这篇做完,你能在 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重载才算生效。 - 排查顺序固定:根目录对不对 → 规则粘全没 → 重载了没 → 目录权限对不对。
原文链接:https://www.gj0.com/thread-158.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。