mike
March 18, 2009, 8:15pm
1
rewrites happen before location {} blocks are considered (if the
rewrite is on a global level) correct?
so
location /foo {
this will never be computed
}
rewrite /foo/bar /somethingelse permanent;
That’s at least what it seems to me, unless I’m missing something.
It doesn’t seem like ^~ ~* etc seem to matter either. Or is it all
depending on the order in the config file?
mike
March 18, 2009, 8:21pm
2
On Wed, Mar 18, 2009 at 12:06:36PM -0700, mike wrote:
That’s at least what it seems to me, unless I’m missing something.
It doesn’t seem like ^~ ~* etc seem to matter either. Or is it all
depending on the order in the config file?
Yes, as in Apache rewrites on server level run before location search.
Then () nginx chooses a location, then nginx runs rewrites inside
the location. If any rewrite is matched and it has not “break” flags,
then nginx chooses a location again, i.e, goes to ( ).
This cycle may run no more than 10 times.
mike
March 18, 2009, 8:40pm
3
well, i did it this way, and it seems to work…
rewrite ^/sites/foo/index.php$ http://foo.com/ permanent;
rewrite ^/sites/coolsw(|/)$ http://foo.com/ permanent;
kill it from search engines
rewrite ^/sites/foo/(.*)$ /kill last;
location /kill {
return 404;
}
2009/3/18 Igor S. [email protected] :
mike
March 18, 2009, 8:56pm
4
2009/3/18 Igor S. [email protected] :
However, it’s better to runs these rewrites under
   location /sites/foo/ {
     rewrite  ^/sites/foo/index.php$ http://foo.com/ permanent;
     return  404;
   }
   location /sites/coolsw {
     rewrite  ^/sites/coolsw(|/)$ http://foo.com/ permanent;
   }
ahh, duh. this works perfect. i had another rewrite i had missed that
was messing things up:
location /sites/foo {
rewrite ^/sites/foo/index.php$ http://foo.com/permanent ;
rewrite ^/sites/foo(|/)$ http://foo.com/permanent ;
return 404;
}
Thanks!
mike
March 18, 2009, 8:45pm
5
On Wed, Mar 18, 2009 at 12:33:15PM -0700, mike wrote:
well, i did it this way, and it seems to work…
rewrite ^/sites/foo/index.php$ http://foo.com/ permanent;
rewrite ^/sites/coolsw(|/)$ http://foo.com/ permanent;
kill it from search engines
rewrite ^/sites/foo/(.*)$ /kill last;
location /kill {
return 404;
}
However, it’s better to runs these rewrites under
location /sites/foo/ {
rewrite ^/sites/foo/index.php$ http://foo.com/ permanent;
return 404;
}
location /sites/coolsw {
rewrite ^/sites/coolsw(|/)$ http://foo.com/ permanent;
}