使用 ngx.re.match() 添加自定义头

我正在尝试基于 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 正则表达式 适用,因此 %. 应该匹配 .(点),但是似乎不起作用。问题在哪里?

如果将正则表达式从 %.pdf$ 修改为 .pdf$,则确实有效,但显然它不仅匹配 blabla.pdf,还匹配 blablapdf

点赞
用户9783845
用户9783845

lua-nginx-module使用PCRE(Perl兼容正则表达式),因此应使用\而不是来转义特殊字符。反斜杠也是Lua字符串转义符号,因此需要进行 _双重转义_:

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

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

ngx.re.match(ngx.var.uri, [[\.pdf$]], "io")
2018-08-10 19:54:14