Masking link with a 302 redirect through nginx not working
I'm trying to mask an affiliate link, so I want to have a 302 redirect through nginx
I want to redirect all /go
links to the respective affiliate link, so all link redirects would be like mydomain.com/go/affiliate
redirects to > https://www.affiliatelink.com
Right now this is what I have
location /go {
rewrite ^/affiliate$ https://www.affiliatelink.com redirect;
}
I have tried everything and I cannot seem to be able to get it to work. Is there a specific file I need to do it on?
I have already tried both /sites-enabled/default
and /conf.d/nginx.conf
Your rewrite doesn't work because the URL path you are requesting is /go/affiliate
but the rewrite
matches on the exact path /affiliate
, which can never be found in location /go
anyway. Fixing that is trivial and obvious, but for performance reasons you should avoid regex whenever possible.
Instead of this sort of rewrite
, use one of two alternate approaches:
-
If you have only a few URL paths to match, use a
location
for each one:location /go/affiliate { return 302 https://affiliate.example.com/; }
-
If you have a large number of links, I'd say more than 7 or so, use a
map
instead.map $uri $aff_redirect { default ""; "/go/affiliate" "https://affiliate.example.com/"; # more links }
A
map
goes in thehttp
block outside of anyserver
block.To use it, check for
$aff_redirect
variable in the appropriateserver
block.if ($aff_redirect) { return 302 $aff_redirect; }