2015-05-01 7 views
1

Я пытаюсь использовать файл .htaccess моего сайта, чтобы переписать все URL-адреса основного домена, чтобы заставить HTTPS, в то время как все URL-адреса на любом поддомене должны быть принудительно использованы для использования HTTP.Принудительное https для основного домена и http для всех поддоменов

В настоящее время у меня есть следующие:

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} !=([a-z0-9-]+).domain.com 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 

Это заставляет HTTPS на основной домен (https://domain.com), а также любых субдоменах. Я думаю, что я немного перепутался с третьей строкой, но просто не могу понять, что нужно туда.

Кроме того, я думаю, что третья строка исключит субдомен из правила перезаписи в HTTPS, но если кто-то нажимает на ссылку или типы в https://sub.domain.com, они могут все еще пройти и в конечном итоге получить предупреждения о ненадежном содержании. Возможно, там должно быть другое условие?

ответ

1

Условие в виде RewriteCond variable =string будет сравнивать переменную с лексиграфической строкой (или другими словами: строка как есть), а не регулярное выражение. Предположительно, RewriteCond variable !=string будет означать не эту строку.

Вы хотите сравнить с регулярным выражением вместо второго правила. Первое правило прост, так как мы знаем весь домен уже.

RewriteCond %{HTTPS} off 
RewriteCond %{HTTP_HOST} =domain.com 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

RewriteCond %{HTTPS} on 
RewriteCond %{HTTP_HOST} ^.+\.domain\.com$ 
RewriteRule^http://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

Изменение R флаг R=301 как только вы проверили, что все работает, как ожидалось.

Я верю, что когда пользователь перейдет к https://sub.domain.com, он все равно будет генерировать предупреждения о безопасности. Это связано с тем, что браузер не завершит квитирование, если сертификат недействителен. Вместо этого он запрашивает у пользователя, что соединение может быть захвачено, и дает пользователю возможность продолжить. Если пользователь продолжает перенаправлять пользователя, и никаких предупреждений о безопасности не отображается. Убедитесь, что https-ссылки на ваши поддомены отсутствуют!

+0

Я отредактировал дополнительную информацию о https-to-http-redirect. – Sumurai8

+0

Я надеялся избежать предупреждений о безопасности, о которых вы упомянули, но я смотрю на свой сайт и нет ссылок непосредственно на поддомены с https в них, так что единственный способ, которым кто-то мог туда попасть, они вручную набрали 'https: // sub.domain.com', и в этот момент это их проблема для этого. Благодаря! – ScottD

Смежные вопросы