10

I am trying to implement this- https://gist.github.com/MendelGusmao/2356310 Lua,nginx based URL shortener,The only change i want to implement is when some query string parameter comes with shortened URL i need to take that parameter and insert into the long URL.

e.g. http://google.com?test=2 will be like http://abc.in/abc while hitting on http://abc.in/abc?test=3 I get redirected to - http://google.com?test=3.

For that i need to take query string parameters from $request_URI, can any one help with some code?

mannuscript
  • 4,711
  • 6
  • 26
  • 25

3 Answers3

26

You should be able to use ngx.var.arg_name where name is the name of the query parameter you want to access. See Variables with Infinite Names section in this tutorial for details on query parameter handling; you may also check my blog post for Lua nginx/openresty examples.

As an alternative, you can use ngx.req.get_uri_args() to retrieve all query parameters as one table. See this section in the same tutorial for the brief comparison between these methods.

Paul Kulchenko
  • 25,884
  • 3
  • 38
  • 56
  • How does the table returned by `get_uri_args` differ from the table referred to by `ngx.var.args`? –  Nov 12 '21 at 20:07
  • 1
    `ngx.var` allows retrieving individual arguments when you know their names (through the use of metafields, these values actually don't exist in the table); `get_uri_args()` allows retrieving all passed arguments. – Paul Kulchenko Nov 12 '21 at 20:13
7

You can also use ngx.var.QUERY_STRING to access the query string and unescape and parse it.

Jerome Anthony
  • 7,823
  • 2
  • 40
  • 31
4

You can obtain the query parameter with just nginx by using $arg_test, test is the name of the query parameter in this example.

This is documented in http://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_.

Steve Chavez
  • 931
  • 10
  • 13