如何在Nginx中匹配以下内容

时间:2017-05-30 12:00:02

标签: nginx nginx-location

亲爱的StackOverflow人口,

我一直试图让两件简单的事情发挥作用,但我不能得到其中的一件。

所以我有nginx服务器块,它看起来像下面的

server {

        listen 443 default;
        server_name secure.<domain>.com;

        if ($host = $server_name) {
        rewrite ^(.*) https://secure.<domain2>.com$request_uri?systpl=<template> permanent;

}

我也尝试过,因为我知道IF是邪恶的,我尝试了类似

的东西
return 301 https://secure.<domain2>.com$request_uri?systpl=<template>;

当然然后我禁用上面的if语句,这样就可以了,所以当我们转到

https://secure.domain.com =&gt; https://secure.domain2.com/?systpl=template

这样可以正常工作,当您输入PHP结尾时,例如

https://secure.domain.com/cart.php =&gt; https://secure.domain2.com/cart.php?systpl=template

这适用于IF和简单返回,我想我需要在另一个服务器块或语句中获取另一个,但这里是问题所在

现在如果你转到

https://secure.domain.com/cart.php?id=7 =&gt; https://secure.domain2.com/cart.php?id=7?systpl=template

这当然不起作用,因为它必须是&amp; systpl ,因为它不以 .php 结束,我怎样才能实现这一点呢添加&amp; systpl 如果它不以 .php 结尾并以字符串结尾,如果没有,则附加?systpl ,如果它以 .PHP

我希望有人知道这是怎么做的,因为我用各种搜索字符串抓取了谷歌搜索结果的前6页。

1 个答案:

答案 0 :(得分:1)

如果您要添加参数,则应该避免使用$request_uri并使用$uri$args代替。

return语句可以改写为:

return 301 https://example.com$uri?systpl=template&$args;

rewrite指令默认附加参数,因此这应该有效:

rewrite ^ https://example.com$uri?systpl=template permanent;

但由于它与return语句相同,因此首选return语句。有关详细信息,请参阅this document