I have a dedicated server with Apache, on which I've set up some VirtualHosts. I've set up one to handle the www domain as well as the non-www domain.
My VH .conf file for the www:
<VirtualHost *>
DocumentRoot /var/www/site
ServerName www.example.com
<Directory "/var/www/site">
allow from all
</Directory>
</VirtualHost>
With this .htaccess
:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Is there a simple way to redirect the www to the non-www version? Currently I'm sending both versions to the same DocumentRoot
and using .htaccess
but I'm sure I must be able to do it in the VirtualHost file.
Turns out
mod_rewrite
rules are fine in the VirtualHosts file, apart from theRewriteBase
rule. I ended up with this:EDIT: on the advice of joschi in the comments, I'm now using this simplified version using the
Redirect
directive frommod_alias
:Be very careful with 301 redirects because, by default, a browser that receives the 301 redirect will store it permanently - meaning you will give up control what that browser will see when it tries to access the domain
www.example.com
.See for example this discussion http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/
So either make sure it does not get cached, or use mod_proxy (I recommend the mod_proxy).
If you are fine with letting the user see the URL change on the browser address bar, use mod_rewrite:
If you want the "redirect" to be invisible to the user, use mod_proxy:
It should be noted that mod_proxy, when badly configured, can harm your network.
You can add
ServerAlias example.com
to theVirtualHost
but the performance will differ from a redirect.Edit
Since you want to redirect and you don't need advanced functionality, it seems like using
Redirect
should suffice for you. You would put theRedirect
under a VirtualHost directive.A client side solution would be to use a
meta refresh
tag.well, you could create one virtual host for the SERVERNAME www.example.com and have it redirect to another virtual host with the servername example.com