Nginx配置location跳转时如何保留原请求的URL查询参数
Nginx重定向保留查询参数配置说明
首次配置丢失参数的原因
Nginx的return指令写固定跳转路径时,默认不会自动拼接原请求的查询参数,你最初的配置:
location = /api/redirects { return 301 /api2/redirects; }
只会强制跳转到固定路径/api2/redirects,所以原请求携带的参数会被直接丢弃。
调整后的配置是标准可行方案
你后续使用的$is_args$args拼接方案是Nginx官方推荐的通用写法,两个内置变量的作用分别是:
$args:存储当前请求完整的查询参数字符串,比如原请求携带?param=1&anotherParam=10时,$args的值就是param=1&anotherParam=10$is_args:请求带查询参数时值为?,没有参数时值为空字符串,避免无参数的请求跳转后路径末尾多出多余的?符号
最终生效的完整配置如下:
location = /api/redirects { return 301 /api2/redirects$is_args$args; }
如果是需要跳转到其他域名的场景,写法逻辑完全一致,示例:
location = /api/redirects { return 301 https://new-example.com/api2/redirects$is_args$args; }
测试注意事项
301是永久重定向,会被浏览器长期缓存,测试配置是否生效时建议使用无痕模式、清除浏览器缓存,或者直接用curl命令校验:
curl -I "https://example.com/api/redirects?param=1&anotherParam=10"
查看返回头中Location字段的值是否符合预期即可。
内容的提问来源于stack exchange,提问作者Gonzalo
相关产品推荐
相关产品推荐

