Your code is fine as is (although you should be warned about the :kaioken: EVERYTHING :kaioken: atom).
[standard rant #1][indent]The use of “lazy regex,” specifically the :kaioken: EVERYTHING :kaioken: atom, (.*), and its close relatives, is the NUMBER ONE coding error of newbies BECAUSE it is “greedy.” Unless you provide an “exit” from your redirection, you will ALWAYS end up in a loop![/indent][/standard rant #1]
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site\\.com$ [NC]
RewriteRule .? http://www.site.com%{REQUEST_URI} [R=301,L]
You could, perhaps, ensure that mod_rewrite is not in the comment mode by starting with RewriteEngine on and not using (.) to capture text already available in the {REQUEST_URI} string but you already have an escape from the loop generally created by (.) so no problem - it WILL capture everything in the path-to-file and simply repeat forcing the www.