WordPress Nginx伪静态规则完整生产模板

WordPress 在 Nginx 环境下如果伪静态规则不完整,最典型的表现就是文章页 404,或者后台设置固定链接后首页正常、内页打不开,甚至出现重定向循环。
本文给出一套可以直接放到生产环境的 Nginx 伪静态规则模板,并说明如何放置、如何验证、如何排查最常见故障。

配置前先确认环境

开始之前,先确认三件事,缺一个都可能让规则失效。

  1. Nginx 已启用 rewrite 模块。大多数编译版本的 Nginx 都自带,你可以在 SSH 执行 nginx -V 2>&1 | grep rewrite,如果看到 --with-http_rewrite_module 就说明支持。
  2. WordPress 固定链接已设置为非“朴素”格式。登录后台,进入“设置 → 固定链接”,选择“文章名”或其他格式;如果还是“朴素”,伪静态规则不会触发。
  3. 当前站点确实使用 Nginx。如果实际是 Apache 或 OpenLiteSpeed,下面这套规则不能直接用。

如果你用的是宝塔面板,可以在“网站 → 设置 → 伪静态”里快速完成配置,不需要手工写文件。

一套完整可复用的 WordPress Nginx 伪静态规则

生产环境不建议只写一行 try_files,需要把静态文件、PHP 请求和固定链接规则一起处理。
以下配置适用于 WordPress 主站放在站点根目录的情况:

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.php index.html;

    # 核心:所有请求先找真实文件,找不到再交给 index.php
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # favicon 和 robots 单独处理,减少无意义日志
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # 静态文件直接返回,不经过 PHP
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|webp|woff|woff2)$ {
        expires 30d;
        access_log off;
    }

    # PHP 请求转发
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/tmp/php-cgi.sock;  # 根据实际 PHP 版本和路径调整
    }
}

真正决定 WordPress 伪静态是否生效的是这一行:

try_files $uri $uri/ /index.php?$args;

它的含义是:如果请求的地址能匹配到真实文件或目录,就直接返回;
如果匹配不到,就交给 index.php 处理,并把原始参数 $args 一并带上。
没有这行,WordPress 内页就会全部 404。

如果你用的是宝塔面板,操作更简单:打开“网站 → 设置 → 伪静态”,下拉选择“WordPress”,然后保存。
宝塔会自动生成一份可用规则,但保存后建议在浏览器里访问一篇已发布的文章确认效果。

为什么会出现 404 和重定向循环

404 常见原因

  • try_files 没写或写错位置。很多主题或教程只给一段残缺的 location /,缺少 $uri/$args,导致文章页打不开。
  • 伪静态规则被注释或覆盖。手动修改 Nginx 配置时,可能在 server 块里重复定义了 location /,后面的会覆盖前面的。
  • 固定链接缓存未刷新。WordPress 修改固定链接后,如果没保存,重写规则不会生效。

重定向循环常见原因

  • 后台“WordPress 地址”和“站点地址”设置不一致。比如站点地址写的是 https://example.com,但请求实际是 http://,而服务器又强制跳转 HTTPS,就可能互相跳。
  • 强制 HTTPS 的规则写在了没有 SSL 的站点上。如果 Nginx 同时存在 return 301 https://...rewrite 规则,且证书配置不完整,容易出现循环。
  • 多套 rewrite 规则叠加。有些用户既在伪静态里写了跳转,又在配置文件里写了其他重写规则,互相冲突。

一个便于理解的结论:WordPress 在 Nginx 下出现 404,90% 以上是因为 try_files 没有正确配置;
出现重定向循环,优先检查后台站点地址和 HTTPS 强制跳转的配合。

配置后如何验证

规则配置完,先检查语法再重载:

nginx -t
systemctl reload nginx   # 或 nginx -s reload

然后在本地浏览器访问一篇文章链接,如果页面正常打开,并且地址是固定链接格式,说明伪静态生效。

更严谨的方式是用 curl 看返回状态码:

curl -I https://你的域名/文章别名/

预期返回 HTTP/2 200
如果看到 301302,需要查看 Location 跳去了哪里,判断是否因协议或路径产生了错误跳转。

建议同时测试首页、分类页、文章页和后台登录页,四类页面都正常才算配置完整。

避坑提示

  • 修改固定链接后必须点击“保存”,即使不换格式也要保存一次,否则规则不会刷新。
  • 如果使用了缓存插件(如 WP Super Cache、W3 Total Cache),清空缓存后再测试,否则可能看到旧页码或 404。
  • 不要随意在伪静态规则里增加 rewrite 跳转,尤其不要和 CDN 回源规则同时使用,否则重定向循环的概率会明显增加。
  • 阿里云或腾讯云 CDN 环境下,回源协议和 SSL 设置要保持一致,优先在 CDN 层配置 HTTPS,源站 Nginx 不要同时写强制跳转。

遇到问题时的快速定位思路

如果你按上面的步骤还是有问题,不要急着删规则,按以下顺序排查:

  1. nginx -t 确认语法没问题。
  2. 看 Nginx 错误日志:默认在 /var/log/nginx/error.log,里面有具体的 PHP 或 rewrite 报错。
  3. 检查 WordPress 固定链接是否保存成功,必要时在“设置 → 固定链接”再保存一次。
  4. 临时关闭一键 HTTPS 或强制跳转插件,看是否还有循环。

这套模板已经覆盖了绝大多数生产环境需求。
只要核心的 try_files 完好、后台地址一致、HTTPS 规则清晰,WordPress 在 Nginx 下的伪静态基本不会再出问题。
如果后续更换服务器或迁移站点,优先复用这套配置,再按实际 PHP 路径修改 fastcgi_pass 即可。

分享到:
上一篇
WooCommerce改自动确认收货时长
下一篇
独立站防CC攻击,Nginx限流
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意