PHP Получить протокол URL сайта – http vs https

Я написал небольшую функцию для установки текущего URL-адреса url-протокола, но у меня нет SSL и я не знаю, как проверить, работает ли он под https. Можете ли вы сказать мне, правильно ли это?

function siteURL() { $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $domainName = $_SERVER['HTTP_HOST'].'/'; return $protocol.$domainName; } define( 'SITE_URL', siteURL() ); 

Нужно ли делать это, как указано выше, или я просто могу это сделать:

 function siteURL() { $protocol = 'http://'; $domainName = $_SERVER['HTTP_HOST'].'/' return $protocol.$domainName; } define( 'SITE_URL', siteURL() ); 

В SSL, не сервер автоматически конвертирует URL-адрес в https, даже если URL-адрес привязки использует http? Нужно ли проверять протокол?

Спасибо!

Это не автоматическое. Ваша верхняя функция выглядит нормально.

Я знаю, что уже поздно, хотя есть гораздо более удобный способ решить эту проблему! решения, показанные выше, довольно беспорядочны, и если кто-то должен когда-либо проверять это, я бы это сделал:

 $protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === true ? 'https://' : 'http://'; 

или даже без каких-либо условий, если вы не любите

 $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://'; 

Посмотрите на $_SERVER["SERVER_PROTOCOL"]

Это работает для меня

 if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $protocol = 'https://'; } else { $protocol = 'http://'; } 

Некоторые изменения:

 function siteURL() { $protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $domainName = $_SERVER['HTTP_HOST']; return $protocol.$domainName; } 

короткий путь

 $scheme = $_SERVER['REQUEST_SCHEME'] . '://'; 

Для любой системы, кроме IIS, этого достаточно для определения собственного URL-адреса сайта:

 $siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].'/'; 

или

 $siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].'/'; 

зависит от того, что вы точно хотите: HTTP_HOST и SERVER_NAME

Поскольку номер порта тестирования не является хорошей практикой по моему мнению, мое решение:

 define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN)); 

Константа HTTPS возвращает TRUE если $_SERVER['HTTPS'] установлен и равен «1», «true», «on» или «yes». Возвращает FALSE в противном случае.

Используйте эту переменную сервера для получения сведений о протоколе:

  $scheme = $_SERVER['REQUEST_SCHEME'] . '://'; echo $scheme; //it gives http:// or https:// 

Обратите внимание, что эта переменная сервера ненадежна. Для получения дополнительной информации посмотрите: надежна ли функция $ _SERVER ['REQUEST_SCHEME']?

 $protocal = 'http'; if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || $_SERVER['HTTPS'] == 'on') {$protocal = 'https';} echo $protocal; 

В случае прокси-сервера SERVER_PORT может не дать правильное значение, так что это то, что сработало для меня –

 $protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTP_X_FORWARDED_PORT'] == 443) ? "https://" : "http://" 

сделал функцию, используя ответ Rid Iculous , который работал в моей системе.

 function site_protocol() { if(isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') return $protocol = 'https://'; else return $protocol = 'http://'; } 

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

Я протестировал большинство проголосовавших answe r, и это не сработало для меня , я закончил использование:

 $protocol = isset($_SERVER['HTTPS']) ? 'https://' : 'http://'; 

это лучшее решение для https или http:

 <?php $protocol = '//'; $site_url = $protocol.$_SERVER["HTTP_HOST"]; ?> 

Но не может отображать https или http, поэтому он используется только для ссылки на ваш контент сайта, например изображение и т. Д.

если вы хотите перенаправить свой сайт в https, добавьте этот код в файл .htaccess:

 <IfModule mod_rewrite.c> RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' RewriteRule ^(.*)$ https://www.your-domain.com$1 [L] </IfModule> 

Измените http://www.your-domain.com своим именем dowmain.

Вот как я это делаю … это короткая версия, if else версия ответа Рида Икулеса

 $protocol = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ? 'https' : 'http';