Nginx 伪静态规则是 WordPress、Laravel、ThinkPHP 等网站部署时经常遇到的配置点。很多网站首页能打开,但文章页 404、固定链接失效、后台保存后访问异常,根因往往就是 rewrite 或 try_files 没配对。
伪静态的核心目标,是把用户访问的美观 URL 正确交给后端应用处理。本文围绕 Nginx 中的 rewrite、try_files 和 WordPress 固定链接展开,讲清常用配置、区别和排查思路。
伪静态是什么
伪静态并不是把动态页面真的变成静态文件,而是让 URL 看起来像静态地址,再由服务器转发给后端程序处理。
/post/nginx-rewrite-guide
/article/123.html
这些地址可能并没有真实文件存在,但 Nginx 可以把请求交给 index.php,再由 WordPress 或其他程序解析路由。
try_files 的作用
try_files 会按顺序检查文件或目录是否存在,如果都不存在,再转发到指定入口。
location / {
try_files $uri $uri/ /index.php?$args;
}
这段配置的意思是:先找真实文件,再找真实目录,都没有就交给 index.php。这是 WordPress 固定链接常用配置。

WordPress 固定链接
WordPress 开启固定链接后,文章页通常不再是 ?p=123,而是更美观的路径。如果 Nginx 没有把这些路径交给 WordPress,就会出现文章页 404。
location / {
try_files $uri $uri/ /index.php?$args;
}
这是最常见的 WordPress Nginx 伪静态规则。配置后需要检查 Nginx 语法并重载。
PHP 入口配置
伪静态只负责把请求交给入口文件,PHP 还需要 FastCGI 配置来真正执行。
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
如果 PHP-FPM socket 或端口写错,可能会出现 502 或 PHP 文件无法执行。
rewrite 的作用
rewrite 用于按规则改写 URL。它更适合处理旧地址跳转、新旧路径兼容、带正则的路径改写。
rewrite ^/old/(.*)$ /new/$1 permanent;
这表示把 /old/xxx 永久重定向到 /new/xxx。如果只是 WordPress 固定链接,一般优先用 try_files,不必写复杂 rewrite。
rewrite 标志
常见标志包括 last、break、redirect、permanent。其中 permanent 是 301 永久重定向,适合正式迁移;redirect 是临时重定向。
错误使用 301 可能被浏览器和搜索引擎缓存,调试时要谨慎。
try_files 和 rewrite 区别
try_files 更像“先检查文件是否存在,不存在再交给入口”;rewrite 更像“按正则规则改写地址”。
WordPress、单入口框架通常用 try_files 更清晰。复杂 URL 迁移、旧链接兼容、强制跳转则更适合 rewrite 或 return。
避免静态资源被转发
伪静态配置要确保真实存在的 CSS、JS、图片不被错误转发给 PHP。try_files $uri 的第一步就是为了解决这个问题。
try_files $uri $uri/ /index.php?$args;
如果静态资源也被转进 PHP,页面可能变慢,甚至出现资源 404。
固定链接 404 排查
如果 WordPress 首页正常、文章页 404,可以按顺序检查:Nginx server 块是否配置了 try_files;root 是否指向 WordPress 根目录;PHP 入口是否可执行;WordPress 后台固定链接是否已保存。
nginx -t
systemctl reload nginx
保存 WordPress 固定链接设置后,再访问文章页测试。
root 和 alias 区别
Nginx 中 root 和 alias 路径拼接方式不同。伪静态场景下如果混用不当,会导致文件路径解析错误。
root /var/www/site;
WordPress 主站通常直接使用 root 指向站点目录。除非非常清楚路径拼接规则,否则不要在主站 location 中随意使用 alias。
多站点注意
如果同一台服务器有多个站点,每个 server 块都要有自己的 root、server_name 和伪静态规则。不要把一个站点的规则复制到另一个站点后忘记改目录。
多站点部署时,访问到错误站点目录也会表现为 404、样式丢失或固定链接异常。
缓存影响
修改伪静态规则后,如果前面还有 CDN、浏览器缓存或 WordPress 缓存插件,可能需要清缓存再测试。尤其是 301 跳转,浏览器缓存会让排查变复杂。
常见错误
第一种错误是只配置 PHP location,没有配置根路径 try_files。第二种错误是 root 指向错误目录。第三种错误是把 WordPress 固定链接问题误判为文章不存在。第四种错误是滥用 rewrite,导致跳转循环。第五种错误是修改配置后忘记 nginx -t 和 reload。
实践建议
WordPress 使用 Nginx 时,优先使用简洁的 try_files $uri $uri/ /index.php?$args; 处理固定链接。只有旧链接迁移、特殊路径兼容、强制跳转时,再使用 rewrite 或 return。
伪静态配置要保持清晰可读。路径转发越简单,后续排查 404、跳转循环和资源加载问题就越容易。













暂无评论内容