nginx: redirect subfolder to subdomain
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.
mrm8
Updated on September 18, 2022Comments
-
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 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 over 11 yearsExcellent with the one liners! + Repped