Nginx redirect one path to another

Solution 1:

Direct quote from Pitfalls and Common Mistakes: Taxing Rewrites:

By using the return directive we can completely avoid evaluation of regular expression.

Please use return instead of rewrite for permanent redirects. Here's my approach to this use-case...

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;

Solution 2:

Ideally you shouldn't use if statements if you can avoid it. Something like this could work (untested).

location ~ /content/(.*)$ {
    rewrite ^ /new-name/$1?$args permanent;

Solution 3:

I used the following solution:

rewrite ^(/content/unique-page-name)(.*)$$2 permanent;

Works a treat.

Solution 4:

For me it worked without the equals sign like this:

location /old-url {
  return 301 /new-url;