NGINX: remove part of url permanantly

Pulkit Sharma picture Pulkit Sharma · Jan 19, 2017 · Viewed 14.4k times · Source

I have redesigned a website and changed the url formats too. Now i need to change the old url to new one.

Here is my old url:

http://www.example.com/forum/showPost/2556/Urgent-Respose

The new url will be:

http://www.example.com/2556/Urgent-Respose

How to redirect to new url using nginx by removing /forum/showPost from url?

Edited: Also this url:

http://www.tikshare.com/business/showDetails/1/Pulkit-Sharma-and-Associates,-Chartered-Accountants-in-Bangalore

New url:

http://www.tikshare.com/classifieds/1/Pulkit-Sharma-and-Associates,-Chartered-Accountants-in-Bangalore

Above link is complete removing whereas this link is to replace business/showDetails with classifieds

Answer

Richard Smith picture Richard Smith · Jan 19, 2017

There are a number of options. You could protect the rewrite within a location block which would be quite efficient as the regular expression is only tested if the URI prefix matches:

location ^~ /forum/showPost {
    rewrite ^/forum/showPost(.*)$ $1 permanent;
}

See this document for more.

You used permanent in your question - which generates a 301 response.

If you use redirect instead of permanent - a 302 response will be generated.

If you use last instead of permanent - an internal redirect will occur and the browser address bar will continue to show the old URL.

In response to your comment:

rewrite ^/forum/showPost(.*)$ /post$1 permanent;