Como o SNI ocorre durante o handshake SSL / TLS, não é possível detectar o suporte ao navegador quando o cliente se conecta ao HTTP.
Então, você está certo; um filtro de agente do usuário é a única maneira de fazer isso.
A grande questão é se você quer atuar em uma lista negra contra navegadores que você sabe que não vai ouvir SNI, ou uma lista branca de navegadores que são conhecidos por suportá-lo. Dispositivos obscuros ou novos, sendo incapazes de usar o site, parecem ser um fator decisivo, então eu diria que a lista de permissões pode ser a melhor opção.
No seu HTTP <VirtualHost>
:
# Internet Explorer 7, 8, 9, on Vista or newer
RewriteCond %{HTTP_USER_AGENT} MSIE\s7.*Windows\sNT\s6 [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\s8.*Windows\sNT\s6 [OR]
RewriteCond %{HTTP_USER_AGENT} MSIE\s9.*Windows\sNT\s6 [OR]
# Chrome on Windows, Mac, Linux
RewriteCond %{HTTP_USER_AGENT} Windows\sNT\s6.*Chrome [OR]
RewriteCond %{HTTP_USER_AGENT} Macintosh.*Chrome [OR]
RewriteCond %{HTTP_USER_AGENT} Linux.*Chrome [OR]
# Firefox - we'll just make the assumption that all versions in the wild support:
RewriteCond %{HTTP_USER_AGENT} Gecko.*Firefox
RewriteRule ^/(.*)$ https://ssl.hostname/$1 [R=301]
Aqui está a opção de lista negra também - tenha em mente que isso corre o risco de enviar um cliente que não usa SNI para um site necessário para SNI, mas por outro lado, enviará usuários de algo novo como o IE 10 para o lugar certo:
# IE 6
RewriteCond %{HTTP_USER_AGENT} !MSIE\s6
# Windows XP/2003
RewriteCond %{HTTP_USER_AGENT} !Windows\sNT\s5
# etc etc
RewriteRule ^/(.*)$ https://ssl.hostname/$1 [R=301]
Existem muitos navegadores por aí. Eu tenho sido muito solto com as expressões e não cobri um monte de navegadores - isso pode se transformar em um grande pesadelo para manter.
Qualquer que seja a opção escolhida ... boa sorte!