根据ngx.re.match()添加自定义标头

时间:2018-08-10 15:49:27

标签: regex nginx lua

我正在尝试基于uri值添加自定义标头,在本例中,是针对所有pdf文件:

  header_filter_by_lua_block {
    local m, err = ngx.re.match(ngx.var.uri, "%.pdf$", "io")
    if m then
      ngx.log(ngx.ERR, "found match: ", m[0])
      ngx.header["X-Custom-Header"] = "ZZzz"
    end
  }

我在此任务中使用的是lua-nginx-module,因此我希望标准lua regex syntax应该适用,因此%.应该与.相匹配(点) ,但是似乎不起作用。有什么问题吗?

如果我将正则表达式从%.pdf$更改为.pdf$,那么它确实可以工作,但显然它不仅与blabla.pdf匹配,而且与blablapdf匹配。

1 个答案:

答案 0 :(得分:1)

lua-nginx-module使用PCRE(与Perl兼容的正则表达式),因此应使用\而不是%来转义特殊字符。反斜杠也是Lua字符串转义符号,因此需要两次转义

ngx.re.match(ngx.var.uri, "\\.pdf$", "io")

或者,您可以使用方括号字符串文字而不是引号来避免双重转义:

ngx.re.match(ngx.var.uri, [[\.pdf$]], "io")