当 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;
}
对于那些难以理解上述内容的人来说。我只是试图让正则表达式更高效。
希望这对有需要的人有帮助!