htaccess для перенаправления http: // и http: // www на https: //, что хорошо работает с поддоменами

Я пытаюсь перенаправить следующие условия:

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

чтобы:

https://mydomain.com

Но я не хочу, чтобы он что-то испортил с поддоменами, чтобы тот, кто печатает:

http://m.mydomain.com

не будет перенаправлен на https. Мой нынешний файл htaccess выглядит так:

# 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

Я попытался использовать некоторые примеры, которые я нашел здесь по переполнению стека, такие как этот:

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

Но хотя это, похоже, сработало для этого человека, это привело к «петле перенаправления» для меня. Кроме того, после того, как я получу эту работу, мне нужно добавить некоторые перенаправления для обработки поддоменов, чтобы невидимо (без изменения URL) перенаправленияhttp://m.mydomain.com вhttp://mydomain.com/m например. Поэтому все, что здесь делается, не должно препятствовать этому.

Если это помогает, сайт размещается на Rackspace Cloud Sites.

Кто-нибудь знает, как это сделать?

Спасибо!

редактировать

Я попробовал это:

#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]

Похоже, что это работает по большей части, за исключением того, что, когда я печатаю подпапку, она не работает Например, если я наберу это в адресной строке:

mydomain.com/temp

Он разрешает:

http://mydomain.com/temp/

Редактировать 2

Ну, я добился определенного прогресса. Пока что у меня есть перенаправление www на не-www, и субдомены работают (хотя адресная строка меняется - думаю, это приемлемо). Кажется, что все портит, если я добавлю туда принудительный https. Кажется, конфликтует с блоками www и non-www. Я могу иметь один или другой. Есть ли способ заставить эти две части работать вместе?

Кроме того, адрес сайта WordPress и адрес WordPress оба установлены вhttps://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]

Заключение

Для большинства веб-хостов решение анубхавы будет работать просто отлично. Однако ключом здесь оказался Rackspace, я считаю. У них есть свои предпочтительные методы, которые я нашел, просматривая их базу знаний. Вот последний файл htaccess, который отлично работает. Все URL-адреса www отправляются на URL-адреса, отличные от www, http отправляется на https, а субдомены перенаправляются в соответствующие подкаталоги, не портя 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

Большое спасибо за вашу помощь с этим.

Ответы на вопрос(1)

Ваш ответ на вопрос