You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NGINX带查询字符串的rewrite重定向被忽略如何解决?

Nginx带查询字符串URL重定向失效解决方案

问题根因

nginx的rewrite指令默认仅匹配URI路径部分(即URL中?之前的内容),查询字符串(?之后的参数)不会被rewrite的匹配规则捕获,因此你现有规则完全匹配不到带page_id参数的请求。

解决方案

方案1:精确匹配单查询参数(推荐,适配你的场景)

直接匹配$args变量(存储完整查询字符串),使用nginx官方推荐的return 301实现重定向,性能优于rewrite,替换你原来的3条rewrite规则即可:

if ($args = "page_id=2966") {
    return 301 /sustainable-travel?;
}
if ($args = "page_id=2965") {
    return 301 /car-sharing?;
}
if ($args = "page_id=2964") {
    return 301 /eco-driving?;
}

注:目标路径末尾的?作用是重定向时丢弃原请求的查询字符串,如果你需要保留原参数可以去掉这个问号。

方案2:适配多参数共存场景

如果请求可能携带多个参数,同时包含page_id的情况,可以用正则匹配$args变量:

if ($args ~* "page_id=2966(&|$)") {
    return 301 /sustainable-travel?;
}
# 其余page_id的规则以此类推编写即可

生效步骤

  • 替换配置中的原有重定向规则
  • 执行nginx -t验证配置语法无错误
  • 执行nginx -s reload重载配置即可生效

内容的提问来源于stack exchange,提问作者owenmelbz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:24:05