Принудительное перенаправление HTTPS на весь веб-сайт, кроме одной страницы

Мой SSL управляется cloudFlare, но я предпочитаю использовать метод htaccess для управления перенаправлением сайта на использование HTTPS. У меня есть домен www.mysite.com и поддомен demo.mysite.com. Я хочу, чтобы HTTPS был на полном веб-сайте www.mysite.com, а также на полном веб-сайте demo.mysite.com, за исключением только 1 страницы на моем поддомене, чтобы предотвратить смешанный контент. Эта страница может содержать ссылки HTTP и HTTPS, загруженные в iFrame. В настоящее время эта страница загружается по HTTPS вместе со всем веб-сайтом, но я хочу, чтобы она загружалась только по HTTP, а не по HTTPS. Страница demo.mysite.com/surf.php, доступ к которой можно получить, нажав на объявление в demo.mysite.com/ads.php.

Я попробовал это в своем файле htaccess, но страница surf.php по-прежнему перенаправляется на HTTPS.

# FORCE HTTPS
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} \/(surf.php)
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

# DISABLE HTTPS
RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/(surf.php) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1 [R=301,L]

Я отключил «Всегда использовать HTTPS» в настройках cloudFlare, и мой SSL является гибким. Кроме того, правила страницы не установлены. Я предпочитаю метод htaccess. Помогите пожалуйста и подскажите что делать?


person Apple Bux    schedule 05.04.2018    source источник
comment
Интересный. Интересно, как HTTPS Everywhere справится с этим.   -  person SDsolar    schedule 05.04.2018
comment
Может быть, вы смотрите на кешированные 301 редиректы? Попробуйте очистить кеш браузера перед повторным доступом к http-версии вашей страницы.   -  person xsigndll    schedule 05.04.2018


Ответы (2)


Если вы все еще сталкиваетесь с проблемами, вы также можете использовать PHP-код. Вставьте этот код в файл заголовка веб-сайта или на каждую страницу, где вы хотите, чтобы веб-сайт был перенаправлен на HTTPS или HTTP. Обязательно отключите «Всегда использовать HTTPS» в cloudFlare, и вы можете выбрать любой SSL, который вы хотите, например, гибкий, полный или полный (строгий).

PHP-код для перенаправления на HTTPS:

if($_SERVER['HTTP_HOST'] != 'localhost'){
  if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on'){
    if(!headers_sent()){
      header("Status: 301 Moved Permanently");
      header(sprintf('Location: https://%s%s',$_SERVER['HTTP_HOST'],$_SERVER['REQUEST_URI']));
      exit();
    }
  }
}

PHP-код для перенаправления на HTTP:

if($_SERVER['HTTP_HOST'] != 'localhost'){
  if(isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'on'){
    if(!headers_sent()){
      header("Status: 301 Moved Permanently");
      header(sprintf('Location: http://%s%s',$_SERVER['HTTP_HOST'],$_SERVER['REQUEST_URI']));
      exit();
    }
  }
}

Это сработало для меня очень хорошо. Вставьте код вверху каждой страницы. Если вы используете session_start();, поместите этот код сразу после него. Это хорошая практика.

person Community    schedule 08.04.2018
comment
Постоянное решение для всех моих перенаправлений с HTTP на HTTPS и наоборот. Большое спасибо. Это сработало как шарм. Я позабочусь о том, чтобы никогда не потерять этот код :) - person Apple Bux; 08.04.2018

У меня есть следующая работа над доменом в Cloudflare, который имеет гибкий сертификат Cloudflare.

Вместо использования .htaccess у меня есть 2 правила страницы Cloudflare.

Первое правило:

*.domain.com/page-to-ignore.htm

SSL: Off

Второе правило:

http://*.domain.com/*

Always Use HTTPS  

Порядок имеет значение, и при тестировании на собственном сайте убедитесь, что вы очистили кеш браузера.

Надеюсь это поможет!

введите здесь описание изображения

person David Taiaroa    schedule 06.04.2018