Я написал небольшую функцию для установления текущего протокола 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? Нужно ли проверять протокол?
Спасибо!
Ответы:
Это не автоматически. Ваша верхняя функция выглядит хорошо.
источник
//mysqite.com
вместоhttps://mysitecom
Я знаю, что уже поздно, хотя есть гораздо более удобный способ решить эту проблему! Другие решения довольно грязные; вот как бы я это сделал:
... или даже без условий, если вы предпочитаете:
Посмотри на
$_SERVER["SERVER_PROTOCOL"]
источник
stripos
вместоstrpos
?$_SERVER['SERVER_PROTOCOL']
предназначена для храненияHTTP/1.0
или вHTTP/1.1
зависимости от версии протокола, о какой конфигурации HTTP-сервера вы говорите, храняhttps
информацию об этой строке, полученную из запроса http?Это работает для меня
источник
Некоторые изменения:
источник
короткий путь
источник
REQUEST_SCHEME
не надеженПо моему мнению, тестирование номера порта не является хорошей практикой:
В
HTTPS
постоянной отдачи ,TRUE
если$_SERVER['HTTPS']
установлен и равен «1», «правда», «на» или «да». В противном случае возвращает FALSE.источник
Для любой системы, кроме IIS, этого вполне достаточно для определения собственного URL сайта:
или
зависит от того, что именно вы хотите: HTTP_HOST или SERVER_NAME
источник
В случае прокси
SERVER_PORT
может не дать правильное значение, так что это то, что сработало для меня -источник
Используйте эту переменную сервера, чтобы получить подробности протокола:
Обратите внимание, что эта переменная сервера ненадежна. Для получения дополнительной информации взгляните на: Является ли $ _SERVER ['REQUEST_SCHEME'] надежным?
источник
Я знаю, что это старый вопрос, но я столкнулся с этим сегодня, так как мне нужно было проверить это на моем сайте. Кажется, ответы выше неоправданно сложны. Чтобы установить протокол сайта, все, что вам нужно сделать, это проверить
$_SERVER['HTTPS']
Если протокол использует HTTPS, то
$_SERVER['HTTPS']
вернется «вкл». Если нет, переменная останется пустой. Например:// 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'];
Вы можете использовать вышеупомянутое, чтобы легко и точно протестировать HTTPS и реализовать соответственно. :)
источник
сделал функцию, используя ответ Rid Iculous , который работал на моей системе.
Надеюсь, поможет
источник
Я проверил ответ, получивший наибольшее количество голосов, и это не сработало для меня , в итоге я использовал:
источник
$_SERVER["HTTPS"]
и поэтому ваш код может вернуться,http://
даже если он должен бытьhttps://
https
, почему код все еще возвращаетсяhttps
?$_SERVER["HTTPS"]
переменная никогда не определяется.источник
Извлечено из CodeIgniter:
источник
это лучшее решение https или http использовать это:
Но не может отображать https или http, поэтому он используется только для ссылки на контент вашего сайта, например, изображение и т. Д.
если вы хотите перенаправить ваш сайт в https, добавьте этот код в файл .htaccess:
Измените www.your-domain.com своим именем dowmain.
источник
Вот как я это делаю ... это сокращенная
if else
версия ответа Рида Айкула ...источник
Я думаю, что полная функция должна выглядеть так:
Ноты:
источник
Я знаю, что немного опоздал на эту вечеринку, но если вы предпочитаете не использовать $ _SERVER, так как он сильно не рекомендуется и даже деактивируется в некоторых PHP-фреймворках; и у вас есть веб-сервер Apache, вы можете использовать его собственную команду таким образом: -
источник