Acredito que a resposta principal redireciona com êxito os sites não www para www (ex: mysite.com -> www.mysite.com ), mas não leva em consideração os subdomínios curinga, o que resulta em:
random.mysite.com -> www.random.mysite.com
Aqui está uma solução com / sem HTTPS
HTTP
RewriteEngine On
RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ http%{ENV:protossl}://www.mysite.com/$1 [L,R=301]
HTTP / HTTPS
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]
RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/$1 [L,R=301]
* observação: não testei https porque atualmente não tenho um certificado para testar, mas se alguém puder verificar ou otimizar o que tenho, isso seria incrível.