nginx: comment obtenir des arguments d’URL contenant des tirets?

J’utilise la variable nginx $arg_ pour obtenir les $arg_ url.

Mais je trouve que l’url est comme ‘ http://foobar.com/search?field-keywords=foobar ‘, $arg_field_keywords ou $arg_field-keywords ne fonctionnent pas.

Puis-je obtenir field-keywords avec $arg_ ?

Merci d’avance.

J’avais trouvé un article qui contenait un petit truc pour faire face à votre problème.

TLDR:

Vous pouvez remapper des variables avec des noms complexes en utilisant le module de carte comme suit:

 map $is_args $http_x_origin { default $http_x-origin; } 

L’astuce est que la carte n’parsing pas complètement ses arguments. La syntaxe est la suivante: map AX {default Y; }, avec:

  • Une variable, de préférence une variable qui ne déclenche pas beaucoup de traitement interne (puisque les configurations nginx sont déclaratives, l’utilisation d’une variable l’évalue). J’utilise $ is_args parce que c’est peu coûteux à calculer.
  • X est le nom de la nouvelle variable que vous allez créer, c’est-à-dire la cible de la carte.
  • Y est le nom de la variable à laquelle vous voulez accéder. À ce stade, il peut contenir des tirets, car la carte effectue sa propre parsing.

Je suppose que cela pourrait fonctionner avec $args_ aussi.

En utilisant openresty / 1.11.2.4, la méthode de la map mentionnée dans la réponse acceptée ne fonctionnait pas pour moi. Mais comme openresty est livré avec le module Lua précompilé, j’ai pu le faire en utilisant le morceau de code suivant:

 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;