The main reason to bother with this is to help search rankings. Sub-domains (for example, www.curiouscat.com and curiouscat.com) are treated as separate websites even if you have entirely the same content displayed for both. If 20% of the links to your site use the www and 80% don’t then your sites ranking by search engines is less than it would be if it was just treated as one site.
You can set the domain to use in Google webmaster tools. But that doesn’t do anything for all the other search engines. Also if you have both, some reports some will keep statistics separately for the non-www and www domain (Google Adsense does this, for example).
Using virtual hosts file (sites-enabled)
For Apache you can place the following code in your virtual hosts file (in the sites-available directory under Apache).
Replace curiouscat.com with your domain name.
<Directory /srv/www/curiouscat.com/public_html/>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.curiouscat.com$ [NC]
RewriteRule ^(.*)$ http://curiouscat.com/$1 [R=301,L]
</Directory>
Then you need to capture the update and reload Apache.
Disable the site (in order to enable it with the updates)
sudo a2dissite curiouscat.com
Enable the site
sudo a2enssite curiouscat.com
Reload Apache
sudo /etc/init.d/apache2 reload
If when you try to reload you get this error message:
“Invalid command ‘RewriteEngine’, perhaps misspelled or defined by a module not included in the server configuration” then enable modrewrite on apache:
sudo a2enmod rewrite
You should then be told to restart apache
udo /etc/init.d/apache2 restart
Using .htaccess
Or you can include the following in your .htaccess file
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.curiouscat.com$ [NC]
RewriteRule ^(.*)$ http://curiouscat.com/$1 [R=301,L]
Related: Checklist for Setting Up a New Domain on VPS – Phusion Passenger Tips and Troubleshooting Ideas
If you wanted to force www to be used instead just flip the regular expression around:
<Directory /srv/www/curiouscat.com/public_html/>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^curiouscat.com$ [NC]
RewriteRule ^(.*)$ http://www.curiouscat.com/$1 [R=301,L]
</Directory>