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