Попробуйте это, я не уверен, что это сработает, но может, я никогда не имел дело с фактическим значением «localhost».
RewriteEngine On
RewriteCond %{HTTP_HOST} !^localhost [NC]
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://mysub.mydomain.com/$1 [R=301,L]
ОБНОВЛЕНИЕ 2: я подумал об этом и понял, что это не подходит для этого случая: https://mysub2.mydomain.com/ перенаправить на https://mysub.mydomain.com/ — прежде чем добавлять это, проверьте этот URL и посмотрите, перенаправляет ли он первое правило или нет, если нет, протестируйте вместо этого второй набор правил.
Чтобы исправить этот случай, попробуйте:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^localhost [NC]
RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1$
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} mysub2.mydomain.com [NC]
RewriteRule ^/?(.*) https://mysub.mydomain.com/$1 [R=301,L]
Объяснение UPDATE2, если оно работает:
Сделайте тест более сложным, теперь перезапись происходит, если не localhost/127.0.0.1, тогда тест не https ИЛИ mysub2.mydomain.com (или любые другие домены/поддомены на сервере, на который вы хотите перенаправить: https://mysub.mydomain.com
= ОБНОВЛЕНИЕ объяснения:
Это довольно простой набор правил. Мы создаем 3 условия, которые должны быть выполнены для применения правил перезаписи. Чтобы быть в безопасности, я использую ^ по привычке, т.е. это то, с чего он начинается, так что это говорит о том, что имя хоста/IP не начинается с localhost/127.0.0.1. ! значит нет.
Имя хоста не является localhost (имя хоста — это то, что вы вводите в браузере для доступа к странице, или имя, которое вы используете для доступа к ней через веб-службу). Поскольку доменные имена не чувствительны к регистру, я добавил флаг [NC], что означает «без учета регистра», т. е. без учета регистра. Это тот, который я не был уверен, будет работать:
RewriteCond %{HTTP_HOST} !^localhost [NC]
IP-адрес удаленного запроса не 127.0.0.1
RewriteCond %{REMOTE_ADDR} !^127.0.0.1$
https уже не включен
RewriteCond %{HTTPS} !=on
Затем фактическое правило перезаписи, которое срабатывает, если выполняются эти три условия. Перепишите все URL-адреса, кроме начального /, возьмите все в этом URL-адресе (.*), который не включает доменное имя, и добавьте его после https://mysub.mydomain.com/, затем выполните постоянную переадресацию 301 на полученный полный URL-адрес. ? означает 0 или 1. (.*) означает: поместить все после запуска / или без запуска / в $1, каждый (...) в правиле помещается в переменные $1, $2 и т.д.
RewriteRule ^/?(.*) https://mysub.mydomain.com/ $1 [R=301, л]
=КОНЕЦ обновления
Ваша настройка не полностью интуитивно понятна для меня, для меня, но если предположить, что на сервере есть только один фактический домен, который вы хотите обрабатывать запросы, то это, я думаю, сработает, а не положительно, учитывая некоторые функции, которые я не знаком с участием.
Для редиректа на https все три условия должны быть истинными, то есть не local/127 и https не включен.
person
Lizardx
schedule
08.10.2015