Я написал небольшую функцию для установки текущего 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';