整理一下:
Nginx 正则表达式捕获组变量$1、$2、$3等,也可以通过这个界面读取,方式为通过ngx.var[1]、ngx.var[2]、ngx.var[3]等。
以上是ngx_lua api说明中的摘录。
按api说明 应该是能取到值的。但写代码去取值 没取到,代码是这样写的:
location = /sumc {
set $1 9;
set $2 10;
content_by_lua '
ngx.say(ngx.var[1])
';
}
运行结果:nil
一直没取到值 ,搞不清楚原因
location = /sumb {
set $bb 99;
content_by_lua_block {
ngx.say(ngx.var.bb)
}
}
运行结果:99
这种写法是定了一个具体的参数,是能输出正确结果到网页的。
问题的关键在于:
sumb中的写法,我们实质上是设置一个变量并赋值。所以可以读到。而$1,它是利用正则表达式去匹配参数,第一个参数就是$1。(第一个)参数本身是可以读写的,但$1是规则,它代表参数列表中的第一个参数。规则本身不能写,只能读。故正确写法如下:
location ~ /sumc/(9)/(10) {
#set $1 9;
#set $2 10;
content_by_lua '
ngx.say(ngx.var[1])
ngx.say(ngx.var[2])
';
}
更多信息请参考: