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:

Where I Donated In 2024

All Grants Fund, Rethink, EA Funds Animal Welfare Fund

via Thing of Things January 17, 2025

2024-25 New Year review

This is an annual post reviewing the last year and setting intentions for next year. I look over different life areas (work, health, parenting, effectiveness, travel, etc) and analyze my life tracking data. Overall this was a pretty good year. Highlights …

via Victoria Krakovna January 15, 2025

The ugly sides of two approaches to charity

What's neglected by "magnificent" philanthropy, and by Singerian global poverty focus The post The ugly sides of two approaches to charity appeared first on Otherwise.

via Otherwise January 13, 2025

more     (via openring)