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
Note that it assumes only one level of tld. So if your site is
'.co.uk' or something, it will redirect all requests to 'www.co.uk',
which is unlikely to be what you want.