Nginx:在重写中转义非字母数字字符

时间:2019-06-18 08:03:57

标签: nginx nginx-location

我正在从Apache迁移到Nginx,我需要一种方法来转换Apache的重写标志[B]。

在应用重写转换之前,[B]标志会转义所有非字母数字字符。 例如

x & y/z

将转换为

x%20%26%20y%2Fz

在Nginx中有没有办法做到这一点?我在网上找到的示例仅删除了这些字符,但我需要一种转换它们的方法。

任何信息将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

Nginx没有为此提供默认功能。 相反,您可以使用lua module来转换特殊字符

步骤是:

  1. 安装lua-rocks和html-entities lib
apt-get install luarocks
luarocks install html-entities
  1. html-entites lib会将每个字符转换为html实体。因此,您应该过滤所需的字符。在此示例中,我将转换不是基本英文字母的所有字符。创建一个文件mymodule.lua
htmlEntities = require('htmlEntities')

local mymodule = {}

function mymodule.convert(string)
    return string:gsub("[^a-zA-Z]", function(c) return htmlEntities.encode(c) end)
end

return mymodule
  1. 在nginx.conf中 指定lua路径。这将加载path2文件夹中的所有lua文件
http {
    lua_package_path "/path1/path2/?.lua;;";
    ...

,要使用该模块,可以使用* _by_lua指令。例如在位置

set_by_lua $escape "return require('mymodule').convert(ngx.var.name);" $name;