Não use HTTP_HOST:
RewriteCond %{HTTP_HOST} ^!example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
Minha preferência é por isso:
RewriteCond %{HTTP_HOST} !^www.*$ [NC]
RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Ou muito mais simples:
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
Exercício deixado para a leitura: encontre mais outras formas.
Para redirecionar https para http:
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [L,R]
Ou:
RewriteCond %{HTTP} off
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}