How to do location /test/place?id=2

Aleksandar Lazic al-nginx at none.at
Sat Oct 19 08:22:37 UTC 2019


Hi P.V.Anthony.

Am 17.10.19 um 23:15 schrieb J. Lewis Muir:
> On 10/18, P.V.Anthony wrote:
>> Currently have the following url,
>>
>> https://old.example.com/test/place?id=1
>> https://old.example.com/test/place?id=2
>> https://old.example.com/test/place?id=3
>>
>> Need to redirect only id=2 to another url.
>>
>> Did the following and it works for id=2. Need id=1 and id=3 to continue
>> normally without change.
>>
>> location = /test/place {
>>      if ($args = "id=2") {
>>        return 301 https://new.example.com/test/place?$args;
>>     }
>> }
> 
> You might want to use $arg_id here (i.e., the $arg_<name> variable for
> the <name> argument).  Otherwise, it won't work if any other arguments
> are given.

Have you tried Lewis suggestion with $arg_id, it looks exactly what you
searching for?

Untested:
location = /test/place {
      if ($arg_id = "2") {
        return 301 https://new.example.com/test/place?$args;
     }
}

The documentation for arg_ is here.
http://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_

>> Or is there a way to do the following? That would be ideal.
>>
>> location = /test/place?id=2 {
>>     return 301 https://new.example.com/test/place?id=2
>> }
> 
> I don't think that's allowed.
> 
>> Unfortunately the above does not work. What is missing?
> 
> What doesn't work?
> 
> I would think your
> 
>> location = /test/place {
> 
> block would work, although not as shown, but I assume you just left
> out the part that normally handles the request.  It would handle the
> requests for id=1 and id=3 as before, and it's just the id=2 case that
> gets redirected, right?
> 
> Lewis
> _______________________________________________
> nginx mailing list
> nginx at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx
> 



More information about the nginx mailing list