整理一下:
Nginx 正則表達(dá)式捕獲組變量$1、$2、$3等,也可以通過這個(gè)界面讀取,方式為通過ngx.var[1]、ngx.var[2]、ngx.var[3]等。
以上是ngx_lua api說明中的摘錄。
按api說明?應(yīng)該是能取到值的。但寫代碼去取值?沒取到,代碼是這樣寫的:
location?=?/sumc?{
? ? set?$1?9;
? ? set?$2?10;
? ? content_by_lua?'
? ? ? ? ngx.say(ngx.var[1])
? ? ';
}
運(yùn)行結(jié)果:nil
一直沒取到值?,搞不清楚原因
location?=?/sumb?{
? ? set?$bb?99;
? ? content_by_lua_block?{
? ? ? ? ngx.say(ngx.var.bb)
? ? }
}
運(yùn)行結(jié)果:99
這種寫法是定了一個(gè)具體的參數(shù),是能輸出正確結(jié)果到網(wǎng)頁的。
問題的關(guān)鍵在于:
sumb中的寫法,我們實(shí)質(zhì)上是設(shè)置一個(gè)變量并賦值。所以可以讀到。而$1,它是利用正則表達(dá)式去匹配參數(shù),第一個(gè)參數(shù)就是$1。(第一個(gè))參數(shù)本身是可以讀寫的,但$1是規(guī)則,它代表參數(shù)列表中的第一個(gè)參數(shù)。規(guī)則本身不能寫,只能讀。故正確寫法如下:
location ~ /sumc/(9)/(10) {
? ? #set?$1?9;
? ? #set?$2?10;
? ? content_by_lua?'
? ? ngx.say(ngx.var[1])
? ? ngx.say(ngx.var[2])
? ? ';
}
更多信息請(qǐng)參考: