Redirecting all subdomains to www in nginx with virtual hosting |
June 17th, 2011 |
nginx, tech |
If you look for how to redirect to 'www.example.com', you see people
writing something where you have to know the hostname, or you have
to know all subdomains. What if we need to be much more general,
because this server hosts multiple domains, someone might come in
on arbitrary subdomain, and we want all requests to go to
'www.REQUESTED_DOMAIN.com'? I came up with the following (it goes
in the 'server' block'):
server_name ~^(?<subdomains>.+\.)?(?<domain>[^.]+\.[^.]+)$; if ($subdomains != www.) { rewrite ^/(.*)$ http://www.$domain/$1 permanent; }This will do:
- www.example.com: no change
- example.com: www.example.com
- mail.example.com -> www.example.com
- mail.example2.com -> www.example2.com
- foo.bar.baz.example.com -> www.examplecom