Принудительное перенаправление 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
Порядок имеет значение, и при тестировании на своем собственном сайте убедитесь, что вы очистили кеш браузера.
Надеюсь это поможет!