Re: Установить переменную с помощью perl внутри location

Michael Kechinov sam на mkechinov.ru
Чт Июл 16 18:10:41 UTC 2015


Меняю + на . - ничего хорошего не происходит.

В частности, вот новый код:

location / {
    perl '
        sub {
            my $r = shift;
            my $request_shop_id = "";
            if ($r->request_method eq "GET") {
                if($r->args =~ /shop_id=([a-z0-9A-Z]+)/ ) {
                    $request_shop_id = "$1";
                }
            } else {
                $request_shop_id = $r->request_body;
            }
            if ( $request_shop_id ne "" ) {
                $r->internal_redirect("/shard01" . $r->uri . "?" .
 $r->args);
            } else {
                $r->internal_redirect("/shard_not_found");
            }
        }
    ';

}

location /shardo1 {
    # Ура
}

location /shard_not_found {
    # :(
}

При выполнении POST-запросов $r->request_body всегда пустое. Почему?

2015-07-16 20:45 GMT+03:00 Maxim Dounin <mdounin на mdounin.ru>:

> Hello!
>
> On Thu, Jul 16, 2015 at 03:14:33PM +0300, Daniel Podolsky wrote:
>
> > > При правильном выполнении должен проставиться заголовок X-MY-VAR равный
> > > =CCCC=, но по факту ставится число 0.
> > > Если убрать "=" из return, то заголовок просто не ставится (видимо,
> пустая
> > > переменная).
> > в перле "+" - не оператор конкатенации строк, извините.
>
> Поработаю К.О.:
> Это, в частности, означает, что результат 0 - правильный, и всё
> работает ровно так, как написано.
>
> > ну и мне кажется, что $outer_variable выполнится раньше, чем код location
>
> Нет.  Код, который вычисляет значение перловой переменной,
> выполняется в момент обращения к этой переменной.  Т.е., в случае
> add_header он выполнится только тогда, когда будет делаться
> add_header - уже в процессе возврата ответа.
>
> Отмечу также, что код perl_set выполняется только один раз за
> запрос, и результат выполнения - кешируется до окончания запроса.
> Соответственно, ранее звучавшая в этом треде рекомендация
> сохранять значение с помощью set - избыточна.
>
> --
> Maxim Dounin
> http://nginx.org/
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
>



-- 
*Michael Kechinov <http://linkedin.com/in/mkechinov>* | sam на mkechinov.ru |
+7 950 0099233
Startups development studio: mkechinov.ru | en <http://mkechinov.com>
Personalization for e-commerce: rees46.com
HackDay: hackday.ru
Twitter-wall: twijector.com
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20150716/bf286f65/attachment.html>


Подробная информация о списке рассылки nginx-ru