Вам просто нужно убедиться, что те правила, которые вызывают внешнее перенаправление, появляются перед теми, которые вызывают внутренние перезаписи. Так просто:
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule !\.(gif|jpg|png|css|js|php|ico|xml)$ /index.php