57

I use NGINX in my dedicated server.

I've a question about the return and rewrite 301.


Rewrite 301:

rewrite ^ http://xxx.xxxxx.net/xx-xxx/$request_uri? permanent;

Return 301:

location ~ redirect-this/?$ {
    return 301 http://xxx.xxxxx.net/xx-xxx/redirect-this$1;
}

All redirects work correctly. But..

Which is the most effective method to make a 301 redirect?

I've more than 200 url to redirect. So, what you recommend?

Ferrmolina
  • 2,737
  • 2
  • 30
  • 46
  • 6
    This question is a little bit confusing since you are comparing `rewrite ^` (match anything) with `location ~ redirect-this/?$` which matches a specific regex. You should reformulate it. But anyway a good question... I'm curious which one is faster `rewrite ^/test` or `location ^/test` with if. – czerasz Jul 11 '16 at 13:56

1 Answers1

45

As stated in the nginx pitfalls you should use server blocks and return statements as they're way faster than evaluating RegEx via location blocks.

Since you're forcing the rewrite rule to send a 301 there's no difference when it comes to SEO, btw..

tutuDajuju
  • 10,307
  • 6
  • 65
  • 88
VF_
  • 2,627
  • 17
  • 17
  • 3
    So what you are suggesting is in fact , return 301 directly in the server block? e.g `server { server_name foo.com; return 301 http://$server_name$request_uri; }` ? – tutuDajuju Apr 04 '16 at 08:11
  • 12
    @tutuDajuju I'd suggest that you use `return 301 http://$host$request_uri;` vs `$server_name` as this will result in redirecting to the first defined server_name opposed to the host in which it was intended. – mbeacom Oct 07 '16 at 16:37