Nginx无.htaccess环境下WordPress URL重写规则配置求助
Nginx 重定向配置实操方案
配置文件有效性说明
site.conf.hbs 不是Nginx原生加载的标准配置文件,属于Handlebars格式的配置模板,常见于面板类Nginx管理工具、自动化部署脚本中:工具会基于该模板渲染生成实际生效的.conf站点配置。如果你是通过对应工具的模板编辑入口修改该文件,触发配置渲染重载后规则会生效;如果是手动直接修改该文件、没有走模板渲染流程,Nginx不会直接加载它,修改不会生效。
最稳妥的验证方式是修改完成后执行 nginx -T,查看当前Nginx实际运行加载的站点配置中是否包含你编写的规则。
原有规则问题
你之前写的规则存在两个核心问题:
- 正则匹配范围过窄,仅能匹配
/public_html下至少两层路径的.php文件,无法覆盖全路径场景 - 使用
last标记仅做Nginx内部转发,不会返回301永久重定向状态码,搜索引擎无法识别权重转移,不符合SEO要求,也未覆盖.html转.php的需求
可用配置(纯Nginx实现,可替代重定向插件)
以下规则全部放在站点对应的server块内,必须放在WordPress默认的通用路由规则前面,保证匹配优先级:
- 移除URL中
/public_html/路径段的301跳转规则# 移除URL中的/public_html前缀,返回301永久重定向,符合SEO权重转移要求 location ^~ /public_html/ { rewrite ^/public_html/(.*)$ /$1 permanent; } - .html后缀到对应.php页面的301跳转规则
# 所有.html页面301跳转到同路径.php页面 location ~* \.html$ { rewrite ^(.*)\.html$ $1.php permanent; } - (可选,适配你不想把联盟文件移到根目录的需求)内部路径 fallback 规则
如果你想把联盟推广相关文件全部存在物理路径public_html目录下、不移动到站点根目录造成文件混乱,不需要对外暴露该路径,替换原有的WordPress根路径location规则为以下内容即可:# 优先查找根目录文件,不存在则自动到public_html目录查找,URL不暴露路径段 location / { try_files $uri $uri/ @public_html_fallback; } location @public_html_fallback { rewrite ^/(.*)$ /public_html/$1 last; } # 保留原有WordPress的php处理规则 location ~ \.php$ { include fastcgi_params; fastcgi_pass 你的php-fpm监听地址; # 按你实际环境填写,比如unix:/run/php/php8.1-fpm.sock fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
生效验证
配置修改完成后先执行 nginx -t,确认语法检测返回success后,执行 nginx -s reload 重载配置。
可以通过curl命令验证规则是否生效:
- 执行
curl -I https://www.website.com/public_html/affiliate/test.php,检查返回状态码是否为301,跳转目标是否为https://www.website.com/affiliate/test.php - 执行
curl -I https://www.website.com/old-page.html,检查返回状态码是否为301,跳转目标是否为https://www.website.com/old-page.php
纯Nginx实现的重定向性能远高于WordPress插件,2万级页面的跳转不会给站点增加额外性能开销。
内容的提问来源于stack exchange,提问作者Joel Switzer
相关产品推荐
相关产品推荐

