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:

Animal Welfare and Capabilitarianism

All ethics is a special case of animal welfare science

via Thing of Things December 18, 2024

Developing the middle ground on polarized topics

Avoiding false dichotomies The post Developing the middle ground on polarized topics appeared first on Otherwise.

via Otherwise November 25, 2024

How to eat vegan on Icon of the Seas

Royal Caribbean has a new giant cruise ship, Icon of the Seas, which has a large selection of food options.

via Home November 21, 2024

more     (via openring)