直接用try_files替换if+rewrite是解决wordpress内页404最稳定推荐方式;标准配置为location / { try_files $uri $uri/ /index.php?$args; },需同步检查index.php存在性、避免php location截断、执行nginx -t && nginx -s reload,并确认php 8.4的fastcgi_param完整性。

直接用 try_files 替换旧式 if + rewrite,是解决 WordPress 内页 404 最稳定、最推荐的方式。它不依赖条件判断,执行效率高,且与 PHP 8.4 及新版 Nginx 兼容性更好。
标准 location 配置写法
在站点 Nginx 配置文件的 server 块内,找到或添加如下 location / 段落:
location / { try_files $uri $uri/ /index.php?$args; }
若需支持 /wp-admin 无尾斜杠访问,额外加一行独立重定向规则:
rewrite ^/wp-admin$ $scheme://$host$uri/ permanent;
必须同步检查的三项细节
只改 try_files 不够,以下三点缺一不可:
- 确认
index.php文件真实存在于网站根目录,且权限为 644 - 确保配置中没有其他
location ~ \.php$块提前截断请求(该块应仅负责 PHP 解析,不参与 URL 路由) - 修改后必须执行
nginx -t && nginx -s reload,不能仅靠宝塔“保存”按钮触发
PHP 8.4 用户特别注意
升级到 PHP 8.4 后,try_files 本身仍有效,但需验证 fastcgi 参数是否完整传递:
打开 /www/server/nginx/conf/enable-php-84.conf,确认其中包含:
fastcgi_param QUERY_STRING $query_string;fastcgi_param PATH_INFO $fastcgi_path_info;
若缺失或拼写错误(如写成 $path_info),会导致 $_GET 或路由解析失败,间接引发 404。
为什么 try_files 能稳定解决 404
Nginx 的 if 指令在重写逻辑中容易引发循环或被跳过,尤其当请求路径含中文、短链接(如 /p/123)或 wp-admin 子目录时。
try_files 是原子级匹配:按顺序检查 $uri 是否为真实文件、是否为真实目录,都不存在就直接交由 /index.php 处理,确保所有动态请求都落到 WordPress 入口,避免漏判。











