我使用nginx变量$arg_
来获取URL参数。nginx:如何获得包含破折号的url args?
但我发现如果网址是'http://foobar.com/search?field-keywords=foobar',$arg_field_keywords
或$arg_field-keywords
不起作用。
我可以通过$arg_
获得field-keywords
吗?
在此先感谢。
我使用nginx变量$arg_
来获取URL参数。nginx:如何获得包含破折号的url args?
但我发现如果网址是'http://foobar.com/search?field-keywords=foobar',$arg_field_keywords
或$arg_field-keywords
不起作用。
我可以通过$arg_
获得field-keywords
吗?
在此先感谢。
我发现了article,这有一个小技巧来处理您的问题。
TLDR:
您可以通过使用地图模块如下重新映射与复杂的名称变量:
map $is_args $http_x_origin {
default $http_x-origin;
}
诀窍是,图不完全分析它的参数。语法是:map A X {default Y; },与:
- 一个任何变量,最好是一个不会触发很多内部处理(因为nginx配置是声明性的,使用变量评估它)。我使用$ is_args,因为计算起来很便宜。
- X是您要创建的新变量的名称,即地图目标。
- Y是要访问的变量的名称。此时,它可以包含破折号,因为地图会自行解析。
我想这可能与$args_
工作了。
使用openresty/1.11.2.4,接受的答案中提到的map
方法对我无效。但由于openresty自带的预编译的Lua模块,我可以使用下面的代码来做到这一点:
set $dataArg '';
set_by_lua_block $dataArg { return ngx.req.get_uri_args()["data-arg"] }
proxy_cache_key $scheme$proxy_host$uri$is_args$dataArg;
我用'数据foo'查询参数尝试过了,不能让它与合作映射'$ arg_data-foo'(使用openresty/1.11.2.4)。有任何想法吗? – dstj