2014-01-08 5 views
3

Я пытаюсь перенаправлять следующие условия: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 Сайты

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

Спасибо!

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

Я попытался это:

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

Edit 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, который отлично работает. Все WWW адреса присылают не-WWW URL, 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 

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

+0

jbalyo, насколько я ценю вас, давая кредит @anubhava, вы должны переместить свой «вывод» на отдельный ответ и пометить его как ответ. Я полностью пропустил ваш вопрос, чтобы прочитать решенный ответ, но чтение всех комментариев к этому ответу привело меня обратно сюда. – ps2goat

+0

мгновенный +1, если вы это сделаете;) – ps2goat

+0

@ ps2goat: Справедливая точка, я обновил ответ с окончательным результатом ниже. – anubhava

ответ

3

Вы можете иметь свой .htaccess, как это:

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 

PS: Обратите внимание, что переменные сервера HTTPS не корректно реализован в Rackspac облако окружающей среды. Правильная переменная для HTTPS в Rackspace Cloud - ENV:HTTPS.

+0

Я пробовал это, спасибо - но он создал цикл перенаправления и разбивает сайт. Я не знаю, почему ... – Typel

+0

Я просто попробовал, все равно получаю цикл переадресации. И теперь я не могу получить доступ/wp-admin/больше. Хм ... – Typel

+0

Хорошо, что wp-admin, должно быть, был какой-то странной проблемой DNS - возможно, домен все еще распространяется (мы переключили его примерно на 12 часов назад). Да, набрав 'https: // mydomain.com /' работает, но я пытаюсь сделать так, чтобы набрав 'http: // mydomain.com /' будет пересылать 'https: //' – Typel