如何在Nginx中将带Query String的URL重定向至另一个带Query String的URL?
在Nginx中实现带Query String的URL重定向方案
当然有可行方案啦!在Nginx里实现这种带Query String的URL重定向其实很简单,我给你两种实用的实现方式,你可以根据自己的具体需求来选:
方法一:精准匹配特定路径并传递指定UTM参数
如果你的需求只是针对/bol-con-per-11883820001这个特定路径做重定向,并且只需要保留原URL里的utm_source、utm_medium、utm_campaign这几个参数,那可以在Nginx的server配置块中添加如下代码:
location = /bol-con-per-11883820001 { # 提取原URL中的UTM参数,拼接至目标URL后 rewrite ^ https://www.example.com/camp/homeprincipal/jan-18/storePL?utm_source=$arg_utm_source&utm_medium=$arg_utm_medium&utm_campaign=$arg_utm_campaign permanent; }
关键细节说明:
location = /bol-con-per-11883820001是精准匹配规则,只有当请求路径完全等于这个值时才会触发重定向,避免误匹配其他路径$arg_xxx是Nginx的内置变量,专门用来获取Query String中对应参数的值,比如$arg_utm_source就能拿到原URL里utm_source的参数内容permanent代表返回301永久重定向,适合长期固定的重定向需求;如果只是临时重定向,可以改成redirect(返回302状态码)
方法二:匹配路径前缀并传递所有Query参数
如果你需要匹配类似/bol-con-per-xxxxxx这类带数字后缀的路径,或者想把原URL里所有Query参数都完整传递到目标URL,那可以用正则匹配的方式:
location ~ ^/bol-con-per-\d+ { # 将原URL的整个Query字符串追加到目标URL后 rewrite ^ https://www.example.com/camp/homeprincipal/jan-18/storePL$is_args$args permanent; }
关键细节说明:
location ~ ^/bol-con-per-\d+是正则匹配规则,^表示路径开头,\d+匹配一个或多个数字,这样所有以/bol-con-per-开头且后面跟数字的路径都会被匹配到$is_args是Nginx内置变量:如果原URL带有Query参数,它的值是?;如果没有则为空字符串,用来确保参数拼接的格式正确$args代表原URL的整个Query String,这样就能把所有参数(包括pid、page、query等)都完整带到目标URL中
最后要注意的小事项:
- 记得把配置中的
https://www.example.com替换成你实际使用的域名,如果是HTTP协议就改成http:// - 修改完Nginx配置后,需要重新加载配置才能生效,执行命令:
sudo nginx -s reload - 可以用curl命令测试重定向是否生效:
curl -I "https://www.example.com/bol-con-per-11883820001?pid=11883820001&page=1&query=bol+con+per&lang=pt&searchConfigId=58c0312b099ff30013d9df47&utm_source=midway&utm_medium=email&utm_campaign=midwaypljan"
查看返回结果中的Location响应头,确认是否指向了正确的目标URL
内容的提问来源于stack exchange,提问作者DFS
相关产品推荐
相关产品推荐

