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
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.

Recent posts on blogs I like:

How Does Fiction Affect Reality?

Social norms

via Thing of Things April 19, 2024

Clarendon Postmortem

I posted a postmortem of a community I worked to help build, Clarendon, in Cambridge MA, over at Supernuclear.

via Home March 19, 2024

How web bloat impacts users with slow devices

In 2017, we looked at how web bloat affects users with slow connections. Even in the U.S., many users didn't have broadband speeds, making much of the web difficult to use. It's still the case that many users don't have broadband speeds, both …

via Posts on March 16, 2024

more     (via openring)