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

Мой SSL управляется cloudFlare, но я предпочитаю использовать метод htaccess для управления перенаправлением сайта для использования HTTPS. У меня есть домен www.mysite.com и поддомен demo.mysite.com, Я хочу HTTPS на полном веб-сайте www.mysite.com и на полном веб-сайте demo.mysite.com а также за исключением одной страницы на моем поддомене, чтобы предотвратить смешанный контент. Эта страница может содержать ссылки 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. Пожалуйста, помогите мне и скажите, что мне делать?

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(); затем поместите этот код сразу после этого. Это хорошая практика.

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

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

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

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

SSL: Off

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

http://*.domain.com/*

Always Use HTTPS  

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

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

Другие вопросы по тегам