我正在使用lgin的nginx。要访问我的ES群集,我使用lua代码进行配置。我想知道代码是如何工作的。
-- get URL
local uri = ngx.var.uri
-- get method
local method = ngx.req.get_method()
local allowed = false
for path, methods in pairs(restrictions[role]) do
-- path matched rules?
local p = string.match(uri, path)
-- method matched rules?
local m = nil
for _, _method in pairs(methods) do
m = m and m or string.match(method, _method)
end
if p and m then
allowed = true
break
end
end
if not allowed then
return write403Message()
end
让我们成为URL: http://localhost/_GET
,method:GET
,path:/_GET
然后
local p = string.match(uri, path) -->Then p variable has value GET(i.e p=GET)
如果我错了,请纠正我?
for _, _method in pairs(methods) do
m = m and m or string.match(method, _method)
end
上面的代码片段会做什么?
答案 0 :(得分:1)
如果您想知道代码的作用,我建议您参考Lua参考手册:
https://www.lua.org/manual/5.3/manual.html#pdf-string.match
如果你想知道你的例子中string.match返回什么,你可以使用print函数。
例如:
foreach (var item in dgridList.Items.OfType<YourClass>())
{
var name = item.t_name;
var type = item.t_type;
Tuple<string, string> mod = new Tuple<string, string>(name, type);
Alist.Add(mod);
}
对于你的例子:
设为网址:http://localhost/_GET,method:GET,路径:/ _ GET然后
local p = string.match(uri,path) - &gt;然后p变量具有值GET(即 P = GET)
p = string.match(uri, path)
print(p)
将实际引用p
/ _ GET是你的模式。 string.match将返回匹配,对于这个简单的dinstinct模式只是模式本身。
例如,如果您要求匹配任何数字,例如,您将从字符串中获取实际数字。