Nginx伪静态规则完整指南:rewrite、try_files与WordPress固定链接

Nginx 伪静态规则是 WordPress、Laravel、ThinkPHP 等网站部署时经常遇到的配置点。很多网站首页能打开,但文章页 404、固定链接失效、后台保存后访问异常,根因往往就是 rewrite 或 try_files 没配对。

伪静态的核心目标,是把用户访问的美观 URL 正确交给后端应用处理。本文围绕 Nginx 中的 rewritetry_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 固定链接常用配置。

Nginx伪静态规则教程配图:rewrite try_files与WordPress固定链接
Nginx 伪静态配置的重点,是让不存在的美观 URL 正确进入应用入口文件。

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 标志

常见标志包括 lastbreakredirectpermanent。其中 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 中 rootalias 路径拼接方式不同。伪静态场景下如果混用不当,会导致文件路径解析错误。

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、跳转循环和资源加载问题就越容易。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容