user1781088
user1781088

Reputation: 11

Nginx location redirect regex not working

I want to redirect requests to /images/someimage.png on my server to http://some.other.server/images/someimage.png. I have the following in my nginx config:

location ^/images/.*(png|jpg|gif)$ {
    rewrite ^/images/(.*)(png|jpg|gif)$ http://anotherserver.com/images/$1$2 redirect;
    return   302;
}

But for some reason it isn't getting hit when I request http://test.com/images/test.png (I just get a 404 because that file doesn't exist on myserver).

Upvotes: 0

Views: 2517

Answers (1)

cobaco
cobaco

Reputation: 10546

If i understand you correctly you want to 302 redirect /image/ url's on one server to the same path on another server. You can do that like so:

location /images/ {
  rewrite ^ $scheme://anotherserver.com$request_uri redirect;
}

you don't need the return 302 the rewrite ... redirect already does that (if you want 301 redirects instead use rewrite .... permanent)

you don't need regexes as long as you have the same url's on the other server either, the builtin variables will suffice

NOTE: The reason your location isn't getting hit is that you have location ^/images/.*(png|jpg|gif)$ instead of location ~ ^/images/.*(png|jpg|gif)$. In other words you forgot to signal regex matching (with ~ for case-sensitive or ~* for case-insensitive)

Upvotes: 1

Related Questions