try_files $uri $uri/ /index.php?$args 是解决 WordPress 内页 404 最稳定方式,它按序匹配文件、目录,最后兜底至 index.php,避免 if+rewrite 的循环与漏判,兼容 PHP 8.4 和新版 Nginx。

直接用 try_files 替换旧式 if + rewrite 是解决 WordPress 内页 404 最稳定、最推荐的方式,尤其在 Nginx 环境下。它不依赖条件判断,执行效率高,且与 PHP 8.4 及新版 Nginx 兼容性更好。
为什么 try_files 能解决 404
Nginx 的 if 指令在重写逻辑中容易引发循环或被跳过,尤其当请求路径含中文、短链接(如 /p/123)或 WP-Admin 子目录时。而 try_files 是原子级匹配:按顺序检查文件是否存在,不存在就直接交由 /index.php 处理,确保所有动态请求都落到 WordPress 入口,避免漏判。
标准 location 块配置写法
在站点配置文件的 server 块内,找到或添加如下 location / 段落:
location / {try_files $uri $uri/ /index.php?$args;}
如果需要支持 /wp-admin 无尾斜杠访问,额外加一行独立规则:
rewrite ^/wp-admin$ $scheme://$host$uri/ permanent;
必须同步检查的三项细节
只改 try_files 不够,以下三点缺一不可:
- 确认
index.php文件真实存在于网站根目录,且权限为 644 - 确保 Nginx 配置中没有其他
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


















