LUA $1的读写问题

整理一下:

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])

    ';

}

更多信息请参考:

ngx_lua API

agentzh 的 Nginx 教程

你可能感兴趣的:(LUA $1的读写问题)