前言
由于某个API的特殊需求,在url中会出现两次?,例如:
https://api.cloudraft.cn/?https://api.cloudflare.com/client/v4/zones/03bfeae5bfad300000000563011154cb/dns_records?&per_page=10&page=1
这种时候如果要在nginx中改写会自动把这个问号给去掉,变成:
https://api.cloudraft.cn/?https://api.cloudflare.com/client/v4/zones/03bfeae5bfad300000000563011154cb/dns_records&per_page=10&page=1
这种时候用就需要用nginx改写成转义后的符号了...
解决方案
#REWRITE-START
rewrite ^/client/v4/(.*)?(.*)$ https://api.cloudraft.cn/?https://api.cloudflare.com/client/v4/$1%3F$2 redirect;
#REWRITE-END
讲解
rewrite声明重写动作;^/client/v4/匹配路径前面的内容;(.*)通配符,代表字符串变量1;?匹配问号;(.*)$通配符结尾,代表字符串变量2;https://api.cloudraft.cn/?https://api.cloudflare.com/client/v4/替换2中的内容;$1替换3中的字符串;%3F是?的转义符;$2替换5中的字符串;redirect;声明302重定向。

