CKR
CKR

Reputation: 27

Read query parameter from url to do a nginx redirect

I have two source URL format and want to redirect both url based on color variant to the destination link with the parameter appended.

Scenario1: www.example.com/pages?abc=123&color=white which should redirect to www.example.com/variant1?abc=123&color=white

Scenario2: www.example.com/pages?abc=456&color=red which should redirect to www.example.com/variant2?abc=456&color=red

I have tried with below , it works for one but not for both as its specific. Not able find the solution for both cases, as else doesnt work

location = /pages {
    if ($args ~* "&color=white”) {
    rewrite ^.*$ /variant1 redirect;
    } }

Upvotes: 1

Views: 1535

Answers (1)

Zenexer
Zenexer

Reputation: 19611

While it is possible to do this in Nginx, it'll defeat some of the advantages that Nginx provides. If you can, it's better to do it within your application code or Lua.

If you choose to go forward with if statements, you'll want to match against individual $arg_* variables rather than $args. In particular, you'll want to use $arg_color, which will contains the color querystring value.

location = /pages {
    if ($arg_color = "white") { return 301 /variant1$is_args$args; }
    if ($arg_color = "red")   { return 301 /variant2$is_args$args; }

    # If we get to this point, there was no match.  You have to keep
    # this very simple and can only use directives documented as being
    # compatible with `if`, or you'll get all sorts of crazy bugs and
    # crashes.
    return 404.
}

Upvotes: 1

Related Questions