На PHP сделать сайт url-протокол - HTTP или https
Я написал небольшую функцию для установления текущего протокола 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? Необходимо ли проверять наличие протокол?
спасибо!
16 ответов:
Я знаю, что уже поздно, хотя есть гораздо более удобный способ решить такую проблему! решения, показанные выше, довольно грязные, и если кто-то когда-нибудь вернется к этому, вот как я бы сделал:
$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; }
потому что номер порта тестирования не является хорошей практикой по мне, мое решение:
define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN));The
HTTPSконстанта возвращаетTRUEЕсли$_SERVER['HTTPS']установлен и равен "1", "true", "on"или " yes". Возвращает FALSE в противном случае.
для любой системы, кроме IIS этого вполне достаточно, чтобы определить сайт self URL:
$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_HOST'].'/';или
$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].'/';зависит от того, что именно вы хотите: HTTP_HOST и ИМЯ_СЕРВЕРА
используйте эту переменную сервера, чтобы получить сведения о протоколе:
$scheme = $_SERVER['REQUEST_SCHEME'] . '://'; echo $scheme; //it gives http:// or https://обратите внимание, что эта переменная сервера ненадежен. Для получения дополнительной информации взгляните на: является ли $_SERVER['REQUEST_SCHEME'] надежным?
в случае доверенности
SERVER_PORTне может дать правильное значение, так это то, что сработало для меня -$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTP_X_FORWARDED_PORT'] == 443) ? "https://" : "http://"
$protocal = 'http'; if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || $_SERVER['HTTPS'] == 'on') {$protocal = 'https';} echo $protocal;
Я знаю, что это старый вопрос, но я столкнулся с этим сегодня, так как мне нужно было проверить это на моем сайте. Кажется, ответы выше напрасно сложны. Чтобы установить протокол сайта, все, что вам нужно сделать, это проверить
$_SERVER['HTTPS']если протокол использует HTTPS, то
$_SERVER['HTTPS']вернет 'on'. Если нет, то переменная останется пустой. Например:
// test if HTTPS is being used. If it is, the echo will return '$SSL_test: on'. If not HTTPS, '$SSL_test' will remain empty.$SSL_test = $_SERVER ['HTTPS'];
echo '<p>$SSL_test: '.$SSL_test.'</p>'; if($SSL_test == true) { echo 'You\'re using SSL'; } else { echo 'You\'re not using SSL'; }Вы можете использовать, чтобы легко и чисто протестируйте HTTPS и реализуйте соответственно. :)
сделал функцию с помощью 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://'; }надеюсь, что это помогает
Я проверил большинство проголосовало answer и это не работает для меня, Я в конечном итоге с помощью:
$protocol = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
извлечено из CodeIgniter:
if ( ! function_exists('is_https')) { /** * Is HTTPS? * * Determines if the application is accessed via an encrypted * (HTTPS) connection. * * @return bool */ function is_https() { if ( ! empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') { return TRUE; } elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https') { return TRUE; } elseif ( ! empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') { return TRUE; } return FALSE; } }
это лучшее решение 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 [L] </IfModule>изменить www.your-domain.com с вашим вдовьим именем.
вот как я это делаю ... это сокращение
if elseверсия удалить Iculous это ответ ...$protocol = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https' ? 'https' : 'http';
Comments