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:
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.