2011年3月11日星期五

Re: Having trouble with the PCRE syntax

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

_______________________________________________
nginx mailing list
nginx@nginx.org
http://nginx.org/mailman/listinfo/nginx

没有评论:

发表评论