Home > Back-end >  Nginx 301 redirect with wildcard
Nginx 301 redirect with wildcard

Time:09-09

Need to create a nginx 301 redirect.

From: /blog/some-article To: /blog/article/some-article

Current nginx configuration:

    location /blog/(.*)$ {
            rewrite ^/blog/(.*)$ ^/blog/article$1 redirect;
    }

Current configuration result:

This URL with multiple 301 redirects

/blog/article/article/article/article/article/article/article/article/article/article/article/article/article/article/article/article/article/article/some-article

How to configure this redirect properly?

Any help will be appreciated, thanks.

CodePudding user response:

You can use a negative lookahead assertion in the regular expression to avoid the redirection loop.

This needs to be done at the location level.

You can avoid using two regular expressions by using a return statement instead or the rewrite. rewrite...redirect is implemented as return 302, whereas a rewrite...permanent would be implemented as return 301.

For example:

location ~ ^(/blog/)((?!article/). )$ {
    return 301 $1article/$2; 
}
  • Related