我正在尝试让NGINX重定向将我带离:

https://example.com/ui/?outletID=123&setID=456


至:

https://example.com/ui/?outletId=123&setIds=456


所以outletID-> outletId AND setID-> setIds

重要提示:我不知道这些参数在URL中出现的位置,因此在它们之前或之后可能还有其他字符串。我只关心此替换:outletID -> outletId; setID -> setIds

第一次尝试时可以使用:

if ($args ~* "^outletID=(\d+)&setID=(\d+)(.*)") {
    set $outletid $1;
    set $setid $2;
    set $everythingelse $3;
    set $args '';
    rewrite ^.*$ /ui/?outletId=$outletid&setIds=$setid$everythingelse permanent;
}


但这似乎是一种非常糟糕的做法,我尤其讨厌最终得到的$everythingelse ($3)解决方案。

最佳答案

为了涵盖所有可能性,您可能需要分两个阶段执行此操作,如果存在outletID,则一个重定向,如果存在setID,则另一个重定向。

例如:

if ($args ~ ^(.+&|)outletID(=.*)$) {
    return 301 "$uri?${1}outletId$2";
}
if ($args ~ ^(.+&|)setID(=.*)$) {
    return 301 "$uri?${1}setIds$2";
}

关于nginx - 在Nginx重定向中重命名args,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55004114/

10-12 05:47