wordpress在宝塔面板中必须用“wordpress”伪静态规则,其核心为location / { try_files $uri $uri/ /index.php?$args; },但需确保php运行模式为php-fpm、无配置冲突、重载nginx且后台保存固定链接。

WordPress 在宝塔面板中必须用哪个伪静态规则
宝塔面板的 WordPress 预设规则基本可用,但默认启用的是 wordpress 规则——它本质只是 Nginx 官方推荐的最简版重写,不包含对多站点、自定义文章类型或 REST API 路由的完整支持。如果你启用了固定链接(如 /post-name/)却 404,大概率不是没选规则,而是规则没生效或被其他配置覆盖。
- 确认网站根目录下有
index.php,且 PHP 运行模式为php-fpm(非apache模式) - 检查站点配置文件中是否重复写了
location /块,导致try_files被覆盖 - 宝塔「伪静态」下拉菜单里选
wordpress后,实际插入的是以下核心段落:location / { try_files $uri $uri/ /index.php?$args; }
为什么选了 wordpress 规则还是 404
常见原因不是规则本身错,而是上下文冲突。Nginx 的 location 匹配优先级和嵌套逻辑容易被忽略。
-
location ~ \.php$块如果写在location /外层或顺序不对,会导致 PHP 请求根本进不到index.php - 宝塔自动生成的配置中可能含
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$等静态资源拦截,若位置在location /之前,且没加try_files回退,反而会截断合法的伪静态路径(比如/wp-json/) - WordPress 后台「设置 → 固定链接」里保存过一次才能真正触发重写逻辑,否则数据库里
permalink_structure是空的,Nginx 规则形同虚设
需要多站点或 REST API 时怎么改规则
标准 wordpress 规则不处理 /wp-json/ 或子域名/子目录多站点的重写。必须手动补全。
- 对 REST API 支持,确保
location /wp-json/不被静态规则拦截,可加:location /wp-json/ { try_files $uri $uri/ /index.php?$args; } - 子目录多站点(如
example.com/site1/),需把try_files改成:try_files $uri $uri/ /site1/index.php?$args;
(路径需与实际子目录名一致) - 修改后务必点宝塔「网站」→「设置」→「配置文件」右上角「重载配置」,不能只点「保存」
改完伪静态后必须验证的三件事
很多问题其实卡在验证环节:以为生效了,其实 Nginx 没重载,或浏览器缓存了 404 响应。
- 执行
nginx -t看配置语法是否通过(宝塔后台「软件商店」→「Nginx」→「配置检查」也能做) - 访问一个真实存在的文章页,用浏览器开发者工具看 Network 标签里响应状态码是 200 还是 404;同时检查 Response Headers 中是否有
X-Powered-By: PHP,没有说明请求根本没进 PHP - 临时禁用所有 WordPress 插件(尤其是缓存类如 WP Super Cache、LiteSpeed Cache),它们可能预生成了 404 页面并缓存住
伪静态真正的复杂点不在规则本身,而在它和 PHP 执行路径、WordPress 内部路由、以及插件缓存策略的耦合。哪怕一行 try_files 写对了,只要 fastcgi_pass 指向错误的 socket,或者 SCRIPT_FILENAME 拼错了路径,照样 404。











