代码之家  ›  专栏  ›  技术社区  ›  NarÅ«nasK

基于ngx.re.match()添加自定义头

  •  0
  • NarÅ«nasK  · 技术社区  · 6 年前

    我正在尝试根据 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 应适用,因此 %. 应该匹配 .

    如果我把regex从 %.pdf$ .pdf$ 那么它确实起作用了,但显然它不仅符合 blabla.pdf 而且 blablapdf

    1 回复  |  直到 6 年前
        1
  •  1
  •   un.def    6 年前

    lua nginx模块使用PCRE(Perl兼容的正则表达式),因此 \ 应该使用而不是 % 以转义特殊字符。反斜杠也是Lua字符串转义符号,因此 双重逃逸

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

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

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