如何使用Nginx rewrite重写指定URL参数名且不影响其他参数
Nginx URL参数名重写解决方案
以下配置可以实现仅替换参数名my_arg为my-arg,不改动其他参数、不受参数数量和位置影响:
if ($args ~ ^(.*)my_arg=(.*)$) { # 替换参数名,拼接得到初步修改后的参数串 set $modified_args $1my-arg=$2; # 清理参数开头多余的&符号 if ($modified_args ~ ^&(.*)) { set $modified_args $1; } # 清理参数中间可能出现的连续&符号 if ($modified_args ~ (.*)&&(.*)) { set $modified_args $1&$2; } # 执行重写:保留原请求路径,仅替换参数,末尾?用于阻止Nginx自动追加原有参数 rewrite ^ $uri?$modified_args? break; }
配置说明
- 如果需要让浏览器地址栏同步显示修改后的参数(外部重定向),把
break替换为redirect(302临时重定向)或permanent(301永久重定向)即可 - 配置兼容
my_arg出现在参数列表任意位置的场景:开头、中间、结尾 - rewrite规则末尾的第二个
?是核心配置,作用是清空Nginx默认要追加的原始参数,避免参数重复
内容的提问来源于stack exchange,提问作者AnthonyMMK
相关产品推荐
相关产品推荐

