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.

link|improve this question

feedback

3 Answers

up vote 5 down vote accepted

Turns out mod_rewrite rules are fine in the VirtualHosts file, apart from the RewriteBase rule. I ended up with this:

<VirtualHost *>
  ServerName www.example.com
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www.example.com
  RewriteRule ^/(.*)$ http://example.com/$1 [L,R=301]
</VirtualHost>

EDIT: on the advice of joschi in the comments, I'm now using this simplified version:

<VirtualHost *>
  ServerName www.example.com
  Redirect 301 / http://example.com/
</VirtualHost>
link|improve this answer
You do not need mod_rewrite for this. Use mod_alias and its RedirectPermanent directive instead. – joschi Mar 9 '10 at 6:58
@joschi: What would be the advantage of that? Is it faster? – DisgruntledGoat Mar 9 '10 at 17:10
3  
You don't need the full-blown rewrite engine with all its checks and possibilities to just redirect the client. It would be (marginally) faster since mod_alias is not near as complex as mod_rewrite and you'd only need one directive (RedirectPermanent) instead of two with mod_rewrite. And last but not least IMHO it's easier to understand what happens in the configuration when someone looks at it the first time. – joschi Mar 10 '10 at 6:00
For some strange reason Redirect 301 .. did not work for us. We had to use the RewriteRule option. – so_mv Apr 5 at 17:42
feedback

You can add ServerAlias example.com to the VirtualHost 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 the Redirect under a VirtualHost directive.

A client side solution would be to use a meta refresh tag.

link|improve this answer
Can you explain a bit further? How would I redirect www.example.com to example.com using this method? – DisgruntledGoat Mar 9 '10 at 21:31
In your primary vhost, you have entries for both ServerName and ServerAlias. One has example.com and the other www.example.com. Then, both dns entries will access the documents specified in the same vhost. – Warner Mar 9 '10 at 21:56
I want to do a redirect though, not just an alias. – DisgruntledGoat Mar 10 '10 at 18:17
Then joshchi's recommendation may be a good approach for you. Seems like hairs are being split at this point. – Warner Mar 10 '10 at 18:50
feedback

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

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.