nginx:如何获取包含破折号的 url 参数?

jas*_*onz 5 nginx

我正在使用 nginx 变量$arg_来获取 url args。

但我发现该 url 是否类似于“ http://foobar.com/search?field-keywords=foobar ”,$arg_field_keywords或者$arg_field-keywords不起作用。

我可以field-keywords$arg_

提前致谢。

Ser*_*hik 1

我找到了文章,其中有一个小技巧可以解决您的问题。

\n

总而言之:

\n
\n

您可以使用映射模块重新映射具有复杂名称的变量,如下所示:

\n
\n
map $is_args $http_x_origin {\n  default $http_x-origin;\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n

诀窍在于,map 没有完全解析它的参数。语法为:map AX { 默认 Y; }, 和:

\n
    \n
  • 任何变量,最好是不会触发太多内部处理的变量(因为 nginx 配置是声明性的,所以使用变量对其进行评估)。我使用 $is_args 因为它\xe2\x80\x99 计算起来很便宜。
  • \n
  • X 是您将要创建的新变量\xe2\x80\x99 的名称,即地图目标。
  • \n
  • Y 是您要访问的变量的名称。此时,它可以包含破折号,因为地图会进行自己的解析。
  • \n
\n
\n

我想它可能适用于$args_

\n

  • 我尝试使用“data-foo”查询字符串参数,但无法使其与映射“$arg_data-foo”一起使用(使用 openresty/1.11.2.4)。有任何想法吗? (2认同)