我们需要将一个URL在服务端进行重定向。比如请求: http://study.arganzheng.me/goto?targetUrl=http%3A%2F%2Freading.arganzheng.me%2Fbook%2Fshare&xxx=yyy,将重定向到targetUrl去:http://reading.arganzheng.me/book/share 去。
那么使用nginx的URL rewrite是很明显的解决方案:
location /goto { rewrite ^(.*)$ $arg_targetUrl redirect;
}
但是测试发现:http://study.arganzheng.me/goto?targetUrl=http%3A%2F%2Freading.arganzheng.me%2Fbook%2Fshare&xxx=yyy经过上面的重定向之后变成了:http://reading.arganzheng.me/book/share?targetUrl=http%3A%2F%2Freading.arganzheng.me%2Fbook%2Fshare&xxx=yyy。就是请求字符串很讨厌的仍然被带上了。
谷歌了一下,发现很多人也遇到这个问题,解决方案很简单,只要在重定向的URL后面加上问号?作为结束符就可以了:
location /goto { rewrite ^(.*)$ $arg_targetUrl? redirect;
}
An easy way to make nginx redirect without query parameters
nginx -s reload
一下,果然可以了。
当然,主干流程完成之后,最好还要验证一下是不是GET请求,是不是有targetUrl参数。