htaccess para redirecionar http: // e http: // www para https: // que funciona bem com subdomínios

Estou tentando redirecionar as seguintes condições:

http://mydomain.com
http://www.mydomain.com

para:

https://mydomain.com

Mas não quero que isso atrapalhe nada com subdomínios, para que alguém que digite:

http://m.meudominio.com

não seria redirecionado para https. Meu arquivo htaccess atual fica assim:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Eu tentei usar alguns dos exemplos que encontrei aqui no estouro de pilha, como este:

RewriteCond %{HTTP_HOST} !^mydomain\.com$ [NC,OR]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]

Mas, embora pareça ter funcionado para essa pessoa, resultou em um "loop de redirecionamento" para mim. Como um aparte, depois de obter esse trabalho, preciso adicionar alguns redirecionamentos para lidar com subdomínios, para redirecionar invisivelmente (sem alterar a URL)http://m.meudominio.com parahttp://mydomain.com/m por exemplo. Portanto, o que for feito aqui não deve impedir que isso aconteça.

Se ajudar, o site está hospedado em sites em nuvem da Rackspace

Alguém sabe como fazer isso?

Obrigado!

Editar

Eu tentei isso:

#http to https
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [L,R=301]

#subdomain 1
RewriteBase /
RewriteCond %{HTTP_HOST} ^sub1.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub1/$1 [R=301,L]

Parece funcionar na maior parte do tempo, exceto que, quando digito uma subpasta, parece não funcionar. Por exemplo, se eu digitar isso na barra de endereço:

mydomain.com/temp

Resolve:

http://mydomain.com/temp/

Editar 2

Bem, eu fiz alguns progressos. Até agora, tenho o redirecionamento de www para não-www e subdomínios funcionando (embora a barra de endereços mude - acho que isso é aceitável). O que parece estragar tudo é se eu colocar qualquer tipo de https forçado lá. Parece entrar em conflito com o bloco www para não-www. Eu posso ter um ou outro. Existe uma maneira de fazer essas duas partes funcionarem juntas?

Além disso, o endereço do site WordPress e o endereço WordPress estão definidos comohttps://mydomain.com

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# Redirect from www to non-www location
RewriteCond %{HTTP_HOST} ^www\.mydomain\.com [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]

# Redirect http to https
# THIS DOES NOT WORK - causes redirect loop
#RewriteCond %{HTTPS} off
#RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

# subdomain
RewriteBase /
RewriteCond %{HTTP_HOST} ^sub1.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub1/$1 [R=301,L]

RewriteBase /
RewriteCond %{HTTP_HOST} ^sub2.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub2/$1 [R=301,L]

Conclusão

Para a maioria dos hosts da web, a solução do anubhava funcionaria perfeitamente. No entanto, a chave aqui acabou sendo Rackspace, acredito. Eles têm seus próprios métodos preferidos que encontrei pesquisando em sua base de conhecimento. Aqui está o arquivo htaccess final que funciona muito bem. Todos os URLs www são enviados para URLs não www, http é enviado para https e subdomínios são redirecionados para seus subdiretórios adequados, sem atrapalhar o WordPress:

RewriteEngine On
RewriteBase /

#subdomain 1
RewriteCond %{HTTP_HOST} ^sub1.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub1/$1 [R=301,L]

#subdomain 2
RewriteCond %{HTTP_HOST} ^sub2.mydomain.com [NC]
RewriteRule ^(.*)$ http://mydomain.com/sub2/$1 [R=301,L]

#get rid of www, works with rackspace cloud sites
RewriteCond %{HTTP_HOST} ^www.mydomain.com [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R=301,L]

#force https, works with rackspace cloud sites
RewriteCond %{ENV:HTTPS} !on [NC]
RewriteRule ^(.*)$ https://mydomain.com/$1 [R,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Muito obrigado por toda a sua ajuda com isso.

questionAnswers(1)

yourAnswerToTheQuestion