Puede que lo necesitemos por temas de seo, por que no queremos que se use http://dominio.com .. por cualquier cosa.

Lo podemos lograr haciendo uso de .htaccess, siempre que tengamos rewrite module habilitado en nuestro apache.

RewriteEngine on
#redirigimos no www a www
RewriteCond %{http_host} ^dominio.com [nc]
RewriteRule ^(.*)$ http://www.dominio.com/$1 [r=301,nc]

Simple y fácil, ya lo tenemos. Ahora supongamos, que tenemos otra redirección, tipo wordpress (en mi caso un desarrollo con yii) que tiene la tipica redirección de todo lo que no exista lo reenvia a index.php, algo así

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Entonces, como la segunda condición siempre se va a cumplir, lo normal es que ignore la primera. La forma de solucionar esto es con el flag L de RewriteRule. L significa Last, osea, que si se cumple dicha condición, es la última que se va a evaluar. Nos quedaría algo así:

RewriteEngine
RewriteCond %{http_host} ^dominio.com [nc]
RewriteRule ^(.*)$ http://www.dominio.com/$1 [r=301,nc,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

Y solucionado