5

I have a server config in nginx which matches several domains:

server {
  server_name example1.com example2.com example3.com;
  # ...
}

And I would like to redirect the www versions to the corresponding domains. I know how to do it for a single domain with a redirect and I would know how to do the inverse thing but I can't find a way here.

Any idea ?

Thanks ! :)

Happynoff
  • 193

2 Answers2

9

Don't use if

server {
    server_name ~^(www\.)(?<domain>.+)$;
    return 301 $scheme://$domain$request_uri;    
}

That's all ...

cadmi
  • 7,488
  • 1
  • 18
  • 24
4

Ok I found this solution:

server {
  server_name www.exemple1.com www.example2.com www.exemple3.com;
  listen 80;

if ($http_host ~ "www.(.*)") { #Note the extra "&quot; after the www return 301 $scheme://$1$request_uri; } }

It works like a charm :)

aliqandil
  • 123
Happynoff
  • 193
  • I would actually set up separate server blocks for each domain name. Using IF is generally bad and really non-performant with NGINX. – probablyup May 13 '13 at 17:12
  • 1
    nginx docs kinda sucks on explaining what's going on in that if condition. http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#if, anyway this answer helped my case. – lasec0203 Mar 23 '18 at 04:44