htaccess, aby przekierować http: // i http: // www do https: //, który gra dobrze z subdomenami

Próbuję przekierować następujące warunki:

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

do:

https://mydomain.com

Ale nie chcę, aby coś zepsuło coś z subdomenami, aby ktoś, kto pisze:

http://m.mydomain.com

nie zostanie przekierowany do https. Mój obecny plik htaccess wygląda tak:

# 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

Próbowałem użyć kilku przykładów, które znalazłem tutaj, w przepełnieniu stosu, takich jak ten:

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

Ale chociaż wydaje się, że działało to dla tej osoby, spowodowało to dla mnie „pętlę przekierowania”. Na marginesie, po otrzymaniu tej pracy muszę dodać przekierowania do obsługi subdomen, aby niewidocznie (bez zmiany adresu URL) przekierowaćhttp://m.mydomain.com dohttp://mojadomena.com/m na przykład. Więc cokolwiek się tu robi, nie powinno temu zapobiec.

Jeśli to pomoże, strona jest hostowana na Rackspace Cloud Sites

Ktoś wie jak to zrobić?

Dzięki!

Edytować

Próbowałem tego:

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

Wydaje się, że działa w przeważającej części, z wyjątkiem tego, że kiedy wpisuję podfolder, nie działa. Na przykład, jeśli wpiszę to w pasku adresu:

mydomain.com/temp

Postanawia:

http://mydomain.com/temp/

Edytuj 2

Cóż, zrobiłem pewien postęp. Do tej pory mam przekierowanie www na nie-www i działające subdomeny (chociaż pasek adresu się zmienia - to chyba do zaakceptowania). To, co wydaje się zepsuć, to umieszczenie tam jakiegoś wymuszonego https. Wydaje się, że konflikt z blokiem www do nie-www. Mogę mieć jedną lub drugą. Czy istnieje sposób, aby te dwie części współpracowały ze sobą?

Ponadto adres strony WordPress i adres WordPress są ustawione nahttps://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]

Wniosek

Dla większości hostów internetowych rozwiązanie anubhava działałoby dobrze. Jednak kluczem do tego okazał się Rackspace. Mają własne preferowane metody, które znalazłem, przeszukując ich bazę wiedzy. Oto ostatni plik htaccess, który działa świetnie. Wszystkie adresy URL www są wysyłane do adresów URL innych niż www, http jest wysyłane do https, a subdomeny przekierowywane do odpowiednich podkatalogów, bez kłopotów z 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

Dziękuję bardzo za całą pomoc w tym zakresie.

questionAnswers(1)

yourAnswerToTheQuestion