Decode url in rewrite
pedroaxl
nginx-forum at nginx.us
Sat Sep 10 00:21:59 UTC 2011
Hey guys,
I am trying to solve a specific problem I have, but have not succeded.
Users would access a link like this:
http://mysite.com/24234234?key=3123&url=http%3A//mailee.me%3Fname%3Djohn%26code%3D123
This is a normal url with some integer params and a url encoded param. I
want nginx to automatically redirect to the url in the parameters. So I
used the following code in the nginx.conf
location /go/click {
set $new_url $arg_url;
set $args '';
rewrite ^.*$ $new_url redirect;
}
It works beautifully. The problem is that if the encoded url also have
params, the client will receive the params encoded and it may not work
in their system.
I try to use perl code to decode the url before redirecting, but it
didnt work.
This is the code inside http context:
perl_modules perl/lib;
perl_require mailee.pm;
This is the code inside location context:
location /go/click {
perl mailee::decode;
set $new_url $arg_url;
#set $args '';
rewrite ^.*$ $args redirect;
}
And the code in mailee.pm:
package mailee;
use nginx;
sub decode {
my $r = shift;
$r->args =~ s/\%3D/=/g;
$r->args =~ s/\%26/&/g;
$r->args =~ s/\%3F/?/g;
$r->args =~ s/\%3A/:/g;
return OK;
}
1;
__END__
But it didnt work too, because I was not able to modify $args inside the
perl function.
I am not sure if this is the best way to do it and if I am doing it
right. Do you have any other solutions?
Thanks
Posted at Nginx Forum: http://forum.nginx.org/read.php?2,215047,215047#msg-215047
More information about the nginx
mailing list