bosnadev

№ 18 · 2015-06-26 · 2 min · server

How To Redirect www To non-www And Vice Versa with Nginx

Permanent 301 redirects from non-www to www and from www to non-www in an Nginx server block, testing the config with nginx -t and checking with curl.

written before the past year · entry 18 of 31 · 10 in the past year

This article is out of date
Written in 2015. Versions, APIs and advice may have changed since.

In this short tutorial I’ll show you how to make permanent redirect from a www URL to non-www and vice versa. I’ll assume that you have superuser privileges, sudo or root access and Nginx already configured, as well as DNS records. More specifically, you need to have an A records for www.yourdomain.com and yourdomain.com .

Redirect non-www to www

To redirect users from a plain, non-www domain to a www domain, you need to add this snippet in your Nginx domain configuration file:

server {    server_name    yourdomain.com    return         301 http://www.yourdomain.com$request_uri;}

Save your configuration and exit. Before restarting Nginx make sure to test your configuration:

terminal1 line
root@secure:~# nginx -t

You should have something like this as output:

terminal3 lines
root@secure:~# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful

Now when everything is checked you can restart Nginx:

terminal1 line
root@secure:~# service nginx restart

Now, if you curl your plain domain, you should get a 301 Moved Permanently response:

terminal8 lines
root@secure:~# curl -I yourdomain.devHTTP/1.1 301 Moved PermanentlyServer: nginx/1.8.0Date: Fri, 26 Jun 2015 08:36:15 GMTContent-Type: text/htmlContent-Length: 184Connection: keep-aliveLocation: http://www.yourdomain.dev/

Redirect www to non-www

In the previous example you saw how to redirect users from a plain non-ww domain to a www domain. However, if you want to redirect from a www to a plain non-www domain you need to add following snippet in your domain configuration file:

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

After any change in Nginx configuration files you should test it for syntax errors:

terminal3 lines
root@secure:~# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful

And if you curl the www domain you should get same 301 Moved Permanently response:

terminal8 lines
root@secure:~# curl -I www.yourdomain.devHTTP/1.1 301 Moved PermanentlyServer: nginx/1.8.0Date: Fri, 26 Jun 2015 08:52:26 GMTContent-Type: text/htmlContent-Length: 184Connection: keep-aliveLocation: http://yourdomain.dev/

And that’s it. You have properly configured permanent redirect.

References:

NGINX 301 Redirects

Nginx rewrite non-www-prefixed domain to www-prefixed domain

Nginx config for www to non-www and non-www to www redirection

How To Redirect www to Non-www with Nginx on CentOS 7

Related

Apache2 mod_fcgid: HTTP request length exceeds MaxRequestLenserverInstalling Icinga2 (fork of Nagios) on Debian 7 (Wheezy)serverSSH Authentication With Keys Instead Passwordsserver