我使用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