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

如何针对特定查询字符串规则配置Nginx Rewrite重定向?

解决Nginx根路径多参数URL重定向问题

问题背景

主站点收到大量根路径下带额外参数的请求,参数组合多样导致缓存混乱,需配置重定向规则:

  • 所有根路径下包含lang=zh-hans且带有其他参数的URL,重定向至/?lang=zh-hans
  • 所有根路径下包含lang=zh-hant且带有其他参数的URL,重定向至/?lang=zh-hant

需重定向到/?lang=zh-hans的请求示例:

/?lang=zh-hans&category=26%2C27&full=1&mo=9&yr=2022&id=1800312749
/?lang=zh-hans&category=26%2C27&full=1&mo=8&yr=2022&id=111871000
/?lang=zh-hans&id=1930613962&category=26%2C27&full=1&mo=10&yr=2022
/?lang=zh-hans&category=26%2C27&full=1&mo=08&yr=2022&id=1205387849

需重定向到/?lang=zh-hant的请求示例:

/?lang=zh-hant&category=26%2C27&full=1&mo=9&yr=2022&id=1800312749
/?lang=zh-hant&category=26%2C27&full=1&mo=8&yr=2022&id=111871000
/?lang=zh-hant&id=1930613962&category=26%2C27&full=1&mo=10&yr=2022
/?lang=zh-hant&category=26%2C27&full=1&mo=08&yr=2022&id=1205387849

无效配置分析

之前尝试的配置无法生效:

rewrite ^/?lang=zh-hans&category=.+ /?lang=zh-hans permanent;

原因:Nginx的rewrite指令默认仅匹配URI的路径部分(即?之前的内容),不会包含查询参数,因此直接用正则匹配查询参数的写法不生效。

正确配置方案

方案一:基于参数变量的精准匹配

server {
    # 保留原有server配置...

    # 精准匹配根路径请求
    location = / {
        # 处理zh-hans多参数重定向
        if ($arg_lang = zh-hans) {
            # 匹配lang=zh-hans在开头/中间/结尾且存在其他参数的情况
            if ($args ~* "^lang=zh-hans&.+$|^.+&lang=zh-hans(&.+)?$") {
                return 301 /?lang=zh-hans;
            }
        }

        # 处理zh-hant多参数重定向
        if ($arg_lang = zh-hant) {
            if ($args ~* "^lang=zh-hant&.+$|^.+&lang=zh-hant(&.+)?$") {
                return 301 /?lang=zh-hant;
            }
        }

        # 根路径原有业务逻辑配置...
    }
}

方案二:简洁的查询参数正则匹配

server {
    # 保留原有server配置...

    location = / {
        # 匹配带zh-hans且存在其他参数的请求,排除已为目标URL的情况
        if ($args ~* "^lang=zh-hans(&.*)?$" && $args !~ "^lang=zh-hans$") {
            return 301 /?lang=zh-hans;
        }

        # 匹配带zh-hant且存在其他参数的请求,排除已为目标URL的情况
        if ($args ~* "^lang=zh-hant(&.*)?$" && $args !~ "^lang=zh-hant$") {
            return 301 /?lang=zh-hant;
        }

        # 根路径原有业务逻辑配置...
    }
}

配置说明

  • location = /:精准匹配根路径请求,避免影响其他路径的正常访问
  • $arg_lang:Nginx内置变量,直接获取查询参数中lang的值
  • $args:Nginx内置变量,存储所有查询参数字符串
  • return 301:实现永久重定向(若需临时重定向可替换为302)
  • 额外的正则条件:避免已经是/?lang=zh-hans或/?lang=zh-hant的请求被重复重定向

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06