Nginx redirect subdomain from www to non-www

March 10, 2018 114 views
Nginx LEMP PHP PHP Frameworks Ubuntu 16.04

Hello, I'm using this nginx conf:

root /var/www/html/laravel/public;

        index index.php index.html index.htm index.nginx-debian.html;

        server_name *.example.com;

        location / {
                try_files $uri $uri/ /index.php?$query_string;

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.1-fpm.sock;

It is multi-tenancy project, I want redirect all subdomains with www to non-www. My question is, how? :) I have one config file for all subdomains.

In my root nginx conf I just used:

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;

But in subdomains config I cant use it. My nginx conf skills are not very good, so pls help.

Thank you all

1 comment
  • Not sure what you mean here:

    But in subdomains config I cant use it.

    There is no such thing as "subdomains" conf. Every site (virtual host) should have its own configuration file.

2 Answers

You can target all www.*.domain.com hostnames by using a regular expression:

server {
    listen 80;
    server_name ~^www\..+\.domain\.com$;
    return 301 $scheme://domain.com$request_uri;

Make sure you escape any dots in your domain name by adding a \ before them like in the snippet above.

Hello, thanks.

But I think we did not understand each other :)

What I need is redirect from www subdomain to non www subdomain, not to domain.


www.sub.example.com redirect to sub.example.com
www.sub2.example.com redirect to sub2.example.com

and NOT:

www.sub.example.com to example.com

But I dont have conf files for each of this subdomains. I have only one sub nginx conf as I mentioned in my first question.

Thank you.

Have another answer? Share your knowledge.