O handshake SSL acontece antes do HTTP, portanto, a lógica de redirecionamento não será invocada antes que o usuário receba um aviso SSL no navegador.
A única maneira de impedir que esse aviso aconteça é ter um certificado que apresente os nomes de servidor usados por esses vhosts, usando, digamos, Subject Alternate Name ou Indicação do nome do servidor . Desta forma, o handshake SSL acontece sem problemas, e você pode redirecionar depois disso. Mas, o que você fizer, precisará de um certificado válido para esses sites não SSL.
A outra maneira é obter outro endereço IP para os sites não-SSL e vhost sobre isso. Basicamente, você precisa separar os sites não SSL dos sites SSL. Dessa forma, um usuário não acessará acidentalmente o vhost SSL e verá o aviso do navegador. Por outro lado, o usuário apenas obterá um tempo limite, pois a porta SSL não está disponível para o site não SSL.
A terceira forma é não se importar com as pessoas que vão para o host SSL se estiverem tentando acessar um site não-SSL. Esta é talvez a opção mais barata e menos dispendiosa, mas pode não estar disponível para você.