# Redirector - unescaping query parameters

**URL:** <https://www.ruby-forum.com/t/redirector-unescaping-query-parameters/202562>\
**Category:** NGINX\
**Created:** [February 1, 2011, 5:27pm UTC](https://www.ruby-forum.com/t/redirector-unescaping-query-parameters/202562 "2011-02-01T17:27:45Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![luislavena](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/0ea827/32.png) [@luislavena](https://www.ruby-forum.com/u/luislavena)\
**Post date:** [February 1, 2011, 5:27pm UTC](https://www.ruby-forum.com/t/redirector-unescaping-query-parameters/202562/1 "2011-02-01T17:27:45Z")

</div>

I am trying to use nginx as a redirector that logs some data about the  
request and then redirects the user to a user-specified URL.

This works well unless the user-specified URL contains query parameters.

For example, if this URL is requested:  
[http://my.site.com/redirect?p1=TEST&r=http%3A//www.new\_site.com](http://my.site.com/redirect?p1=TEST&r=http%3A//www.new_site.com)

I use this rewrite rule to redirect:

if ($arg\_r ~\* http._) {  
rewrite ^(._)$ $arg\_r? redirect;  
}

Any parameters in the user-specified URL are pre-escaped - notice that  
the colon was replaced with %3A.

However, if the ‘r’ parameter that I redirect to also contains escaped  
parameters, they do NOT get unescaped. For example, if the user requests  
this URL:

[http://my.site.com/redirect?p1=TEST&r=http%3A//my.site.jp%3Fparameter\_1%3Dvalue\_1%26parameter\_2%3Dvalue\_2](http://my.site.com/redirect?p1=TEST&r=http%3A//my.site.jp%3Fparameter_1%3Dvalue_1%26parameter_2%3Dvalue_2)

That is incorrectly rewritten as:  
[http://my.site.jp?parameter\_1%3Dvalue\_1%26parameter\_2%3Dvalue\_2](http://my.site.jp?parameter_1%3Dvalue_1%26parameter_2%3Dvalue_2)

How can I instead redirect the user to:  
[http://my.site.jp?parameter\_1=value\_1&parameter\_2=value\_2](http://my.site.jp?parameter_1=value_1&parameter_2=value_2)

I do not know what parameters the user will be supplying in the  
user-specified URL beforehand, so I can not extract them and rewrite  
them manually. That is why they are encoded inside the ‘r’ parameter.

---

<div class="post-metadata">

**Author:** ![supasta](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/ebca7d/32.png) [@supasta](https://www.ruby-forum.com/u/supasta)\
**Post date:** [February 4, 2011, 10:35pm UTC](https://www.ruby-forum.com/t/redirector-unescaping-query-parameters/202562/2 "2011-02-04T22:35:45Z")

</div>

I’ve discovered it is possible to use the perl\_set to unencode the ‘r’  
parameter, but that seems messy.

I would be very grateful for any other suggestions.
