nginx: redirect subfolder to subdomain

6,061

Solution 1

You could try using nested location like this

location ~ ^/\~([^/]+)/(.*)$ {
  location ~ ^/\~meow/(.*)$ {
    rewrite ^(.*)$ http://meow.example.com$1 permanent;     
  }
  [...]
}

Solution 2

A static location would be more efficient for what you're asking. If you read the four rules at http://wiki.nginx.org/HttpCoreModule#location , you'll see that a locaion ^~ will not be overridden by a regex location. You also seem to want to strip the leading /~meow while redirecting. The correct approach would be:

location ^~ /~meow/ {
  rewrite ^/~meow(.*) http://meow.example.com$1 permanent;
}

As an aside, there's no reason to capture the entire uri when rewriting. The current uri is already saved in $uri.

rewrite ^(.*)$ http://meow.example.com$1 permanent;

and

rewrite ^ http://meow.example.com$uri permanent;

will always produce the same result, and the second rewrite is more efficient, since it's a short circuited match and already contains what you're trying to capture anyway.

Solution 3

Regexp locations are checked in the order of their appearance in the configuration file and the first positive match is used. Which means, your location ~ ^/\~meow/(.*)$ must be above other two locations in the configuration file.

Share:
6,061
mrm8
Author by

mrm8

Updated on September 18, 2022

Comments

  • mrm8
    mrm8 almost 2 years

    I'm trying to redirect a subfolder to a subdomain in nginx. I want http://example.com/~meow/ to be redirected to http://meow.example.com/. I tried the following:

    location ~ ^/\~meow/(.*)$ {
        rewrite ^(.*)$ http://meow.example.com$1 permanent;
    }
    

    But it doesn't work. It gets caught by my location block for user directories:

    location ~ ^/~([^/]+)/(.+\.php)$ {
        [...]
    }
    
    and
    
    location ~ ^/\~([^/]+)/(.*)$ {
        [...]
    }
    

    So, how would I do this? Oh, and I only want /~meow/ to be redirected. All other user directories should not be changed.

  • Mel
    Mel about 13 years
    +1 for nested. These things have a way of growing out of proportion over time and keeping it nested means you're not scratching your head what you missed that prevents it from working.
  • TheBlackBenzKid
    TheBlackBenzKid over 11 years
    Excellent with the one liners! + Repped