Я пытаюсь перенаправлять следующие условия:Htaccess для перенаправления HTTP: // и HTTP: // WWW к https: //, что играет хорошо с поддоменов
http://mydomain.com
http://www.mydomain.com
в:
https://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
Большое спасибо за вашу помощь в этом.
jbalyo, насколько я ценю вас, давая кредит @anubhava, вы должны переместить свой «вывод» на отдельный ответ и пометить его как ответ. Я полностью пропустил ваш вопрос, чтобы прочитать решенный ответ, но чтение всех комментариев к этому ответу привело меня обратно сюда. – ps2goat
мгновенный +1, если вы это сделаете;) – ps2goat
@ ps2goat: Справедливая точка, я обновил ответ с окончательным результатом ниже. – anubhava