Nginx使用查询字符串参数重写规则

时间:2016-04-14 21:26:02

标签: nginx url-rewriting

以下是我的nginx重写规则

rewrite ^(.*)$ http://www.destination.com/main.php?utm_source=xxx&utm_medium=yyy&utm_campaign=zzz permanent;

到目前为止,一切都有效,除非有查询参数。

这是一个永久性的301重定向,我需要配置查询字符串时的情况,它将在utm跟踪查询之前附加。

如何在没有查询字符串的情况下处理重写时如何执行此操作?

例如

http://www.from.com/?test=ABC

转到

http://www.destination.com/main.php?test=ABC&utm_source=xxx&utm_medium=yyy&utm_campaign=zzz

而不是

http://www.destination.com/main.php?utm_source=xxx&utm_medium=yyy&utm_campaign=zzz&test=ABC

1 个答案:

答案 0 :(得分:2)

您可以手动插入查询参数,但需要使用map来计算是否需要&分隔符。

map应放在http区块中:

map $is_args $separator {
    default "";
    "?"     "&";
}

rewrite看起来像这样:

rewrite ^(.*)$ /some/url.php?$args${separator}q=$1? permanent;

有关详细信息,请参阅this document