Eu tenho um certificado SSL curinga, que está funcionando bem:
<VirtualHost *:443>
ServerName star.mydomain.com
DocumentRoot /dev/null
SSLEngine On
SSLCertificateFile /etc/httpd/conf.d/star.mydomain.com.crt
SSLCertificateKeyFile /etc/httpd/conf.d/star.mydomain.com.key
SSLCertificateChainFile /etc/httpd/conf.d/star.mydomain.com.gd_bundle.crt
</VirtualHost>
Eu, então, tenho vários sub-domínios que escutam na porta SSL:
<Virtualhost *:80 *:443>
ServerName staging.mydomain.com
DocumentRoot /var/www/staging.mydomain.com/
CustomLog logs/staging.mydomain.com.log combined
AccessFileName .htaccess
DirectoryIndex index.php index.html
</VirtualHost>
<Virtualhost *:80 *:443>
ServerName www.mydomain.com
DocumentRoot /var/www/www.mydomain.com/
CustomLog logs/www.mydomain.com.log combined
AccessFileName .htaccess
DirectoryIndex index.php index.html
</VirtualHost>
O que é ótimo. Posso acessar o link ou link e tudo é feliz.
Agora, o truque é, até onde eu sei, não há como saber se a solicitação é SSL ou não nesta configuração.
Por exemplo, todas as variáveis de ambiente apontam para a solicitação ser não-ssl mesmo quando é uma solicitação SSL. Eu suspeito que isso se deva à implementação do mod_ssl.
Em particular, quero fazer algo assim nos virtualhosts:
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} dashboard
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]
Mas recebo um loop de redirecionamento porque SERVER_PORT é sempre 80, mesmo sob SSL.
Eu também tentei adicionar um SetEnv IS_SSL 1 no primeiro host virtual star.mydomain.com, mas a variável também não está disponível para o mod_rewrite.
Sem criar hosts virtuais ssl / não-ssl separados para cada domínio, há uma maneira de fazer isso funcionar?
Obrigado!