NGINX 替换 $args 中的字符串

NGINX 替换 $args 中的字符串

当 nginx 中的 src $arg_param 上存在字符串 /static/ 时,我想要操作一个参数。

    location ~ ^/customresize.php {
        if($args_param4 ~ /static/){
           #replace /static/ with /a/static/ 
        }
    }

正如你所理解的,之前和之后都有参数,所以我只需要替换这部分。例如

https://my.site.io/customresize.php?z=2&w=200&h=100&sec=https://my.site.io/static/img.png

并将上面的 URL 中的 /static/ 替换为 /a/static/。

谢谢。

答案1

    location ~ ^/customresize.php {
           if ( $args ~* ^z=([0-9]+)&w=([0-9]+)&h=([0-9]+)&src=https://([a-zAZ\.]+)/static/([a-zA-Z\./_-]+)$ ) {
           set $args zc=$1&w=$2&h=$3&src=https://$4/a/static/$5;
    }

这实际上是有效的。它不是实际替换,而是重新创建参数。尝试使正则表达式尽可能便宜,但由于某种原因,无法使 nginx 接受 [0-9]{n,m},只有“+”有效。

我们只需保存所有先前的选项并替换我们想要替换的部分。以上可以简化为:

        location ~ ^/customresize.php {
           if ( $args ~* ^(.*)/static/(.*)$ ) {
           set $args $1/a/static/$2;
    }

对于那些难以理解上述内容的人来说。我只是试图让正则表达式更高效。

希望这对有需要的人有帮助!

相关内容