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

如何在Nginx中重写单个URL参数且保留其他原有查询参数?

Nginx实现查询参数替换方案

实现思路

  • 利用Nginx原生map指令匹配提取id参数中的合作方标识,无需引入第三方模块
  • 支持两种适配模式:内部隐式重写(用户侧地址不变,旧URL可正常访问,符合需求)、301强制跳转新格式
  • 自动保留除id外的所有原有查询参数

具体配置

首先在Nginx全局http配置段中添加map规则:

http {
    # 提取id参数中的合作方编号,生成对应的rs参数值
    map $arg_id $rs_value {
        default "";
        # 匹配id=partnerX格式的参数,提取X部分生成rs=partners_partnerX
        ~^partner(?<partner_no>\d+)$ partners_partner$partner_no;
        # 如需新增其他合作方规则,直接在下方添加对应正则匹配行即可
    }

    # 此处保留你原有http段的其他配置,如日志格式、upstream等
    server {
        listen 80;
        server_name 你的实际域名;
        root 你的站点根目录;

        # 参数替换核心逻辑,适配所有路径的请求
        if ($arg_id ~ ^partner\d+$) {
            set $trimmed_query "";
            # 移除原查询字符串中的id参数
            if ($query_string ~* "(.*)(^|&)id=partner\d+(&.*|$)") {
                set $trimmed_query $1$3;
            }
            # 拼接新的查询字符串,rs参数放在最前,后面接保留的原有参数
            set $query_string "rs=$rs_value$trimmed_query";

            # 【可选】如果需要用户访问旧链接自动跳转到新格式地址,取消注释下行即可
            # return 301 $uri?$query_string;
        }

        # 此处保留你原有server段的所有配置,如location规则、反向代理、PHP解析等
        location / {
            try_files $uri $uri/ /index.php$is_args$args;
        }
    }
}

验证方式

  1. 配置完成后执行nginx -t检查语法是否正确
  2. 语法校验通过后执行nginx -s reload重载Nginx配置
  3. 访问测试链接:
    • 原地址你的域名/example?id=partner1&arg1=a&arg2=b,后端将收到rs=partners_partner1&arg1=a&arg2=b参数
    • 原地址你的域名/?id=partner1&arg1=a&arg2=b,后端将收到rs=partners_partner1&arg1=a&arg2=b参数
    • 未带id参数的请求不受任何影响

内容的提问来源于stack exchange,提问作者Василий Старовойтов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 11:45:03