因为公司业务需求用到rewrite 其中有一个是要把a.php?id=2重定向到b-2.html
开始简单的写为
rewrite "^/a(.*)?(.*)$"  /b-$2.html  permanent;
总是不能正确的301到b-2.html
查资料发现
重写只能针对请求的uri进行重写,/a.php问号后面的是请求参数,在nginx用$query_string表示,直接写这样的一条重写肯定不会正确匹配,因为rewrite参数只会匹配请求的uri,在写重写的时候需要把$query_string变量追加到重写的uri后面,为了防止uri中的参数追加到重写后的uri,可以在后面加个问号:
if ($query_string ~ "id=(.*)") {
    set   $id   $1;
    rewrite ^/a.php$ /b-$id.html? permanent;
}