Having trouble with the PCRE syntax

Maxim Dounin mdounin at mdounin.ru
Fri Mar 11 20:33:06 MSK 2011


Hello!

On Fri, Mar 11, 2011 at 10:01:03AM -0500, strike wrote:

> Hi,
> 
> would anybody please tell me what I'm doing wrong here?
> 
> location ~* ^/(forum|forums|board)/? {
>      rewrite ^/([^/]*)/*(.*) http://forum.my_domain.com/$2
> permanent;
> }
> 
> I'd like to make it redirect visitors from
> http://www.my_domain.com/forum (note: there's no trailing slash),
> http://www.my_domain.com/forum/, http://www.my_domain.com/forums (again,
> there's no trailing slash here), http://www.my_domain.com/forums/,
> http://www.my_domain.com/board (...yep) and
> http://www.my_domain.com/board/ to http://forum.my_domain.com/. Neither
> the path (except "forum"/"forums"/"board") nor the query (if there's
> one) should get cut off. It's working so far, but it also redirects
> visitors from ex. http://www.my_domain.com/forumfoobar/, which isn't
> what I want. :-(

Correct regexp-based solution would be

    location ~* ^/(?:forum|forums|board)(?:/|$) {
        rewrite ^/[^/]*/*(.*) http://forum.my_domain.com/$2 permanent;
    }

But recommended way is to avoid regexp-based solutions without 
real need.  It's much simplier and much more scalable to write 
configuration with normal static locations, i.e.

    location = /forum {
        rewrite ^ http://forum.my_domain.com/ permanent;
    }
    location /forum/ {
        rewrite ^/forum/(.*) http://forum.my_domain.com/$1 permanent;
    }
    location = /board {
        rewrite ^ http://forum.my_domain.com/ permanent;
    }
    location /board/ {
        rewrite ^/board/(.*) http://forum.my_domain.com/$1 permanent;
    }

This way you'll save yourself a headache.  As a side effect - it's 
faster.

Maxim Dounin



More information about the nginx mailing list