将查询字符串中的参数重写为兼容php数组

PHP使用[ ]格式在查询字符串中接受数组参数

http://my.url/bar.php?foo[]=1&foo[]=2&foo[]=3&foo[]=4

我需要允许没有方括号的格式

http://my.url/bar.php?foo=1&foo=2&foo=3&foo=4

我不想改变我的应用程序,因此我考虑将第二个URL重写为第一个URL。这在NGINX中是否可能?

点赞
用户136338
用户136338

我认为使用相当简单的lua脚本可以实现该解决方案。

您可以:

类似以下内容(未经测试,请根据您的实际情况进行调整):

// “foo = val1&bar = baz%foo = val2”
地点= /test {
   content_by_lua_block {
     local args = ngx.req.get_uri_args()
     local qs = {}
     for key, val in pairs(args) do
         if type(val) == "table" then
             table.insert(qs, key.."[]" .. table.concat(val, key.."[]"))
         else
             table.insert(qs, val)
         end
     end
     // qs = { foo[] = {"val1", "val2"}, bar = "baz" }
     ngx.req.set_uri_args(qs)
   }
   // “foo [] = val1&foo [] = val2&bar = baz”
}

注意:如果您想考虑“多维”数组,必须扩展此解决方案。

2017-05-09 20:01:45