NGINX заменяет строку в $ args

Я хотел бы управлять параметром, когда строка / static / существует в src $ arg_param в nginx.

    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/.

Спасибо.

0
задан 27 August 2019 в 14:23
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;
    }

Для тех, кому сложно понять приведенное выше. Я просто попытался сделать регулярное выражение более производительным.

Надеюсь, это поможет всем, кто в этом нуждается!

0
ответ дан 5 December 2019 в 01:06

Теги

Похожие вопросы