Справочная информация: веб-сайт (example.com), настройка DNS через прокси-план Cloudflare, предлагает "гибкий ssl" (здесь), что означает, что ssl существует только между клиентом и облачным флагом, а не между облачным флагом и сервером, поэтому ему не нужен выделенный ip и не требуется специальных настроек на сервере. Сервер настроен на то, чтобы не использовать ssl (просто общий веб-сайт), однако cloudflare flexible ssl заботится о аспекте ssl.
Язык: PHP (codeignighter, но это действительно не имеет значения)
Цель: при просмотре в домене "exmple.com/" или "http://exmple.com/" сгенерировать переменную "http://example.com" и при просмотре на "https://example.com/*" для генерации переменной "https://example.com".
Что должно работать (но не работает):
$root = '';
if( isset($_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] != 'off' )
{
//it doesnt reach here...
$root .= 'https://';
}
else
{
$root .= 'http://';
}
$root .= "".$_SERVER['HTTP_HOST'];
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
Я всегда могу сделать так: "//example.com", но это действительно не решает проблему для меня. Мысли? Должен ли я выполнять некоторое сравнение строк для определения https-ness?
Я уверен, что причина этого в том, что запрос достигает сервера (https или http), он поступает через порт 80, и он не распознается как ssl, поэтому $_SERVER ['HTTPS'] не определен. Я мог бы настроить пользовательский ssl между сервером и облачным флером, но был бы лучше (меньше усилий), если бы я мог просто использовать некоторое регулярное выражение и каким-то образом сравнить URL-адрес.
Я также хотел бы знать возможные проблемы и уязвимости.
Спасибо:)