PHP Получить протокол URL сайта - http против https - PullRequest
187 голосов
/ 21 декабря 2010

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

2 голосов
/ 30 июня 2016
$protocal = 'http';
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || $_SERVER['HTTPS'] == 'on') {$protocal = 'https';}


echo $protocal;
2 голосов
/ 10 мая 2014

сделал функцию, используя ответ 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://';
}

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

1 голос
/ 03 июля 2018

Извлечено из 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;
    }
}
1 голос
/ 13 мая 2016

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

$protocol = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
0 голосов
/ 14 ноября 2017

Вот как я это делаю ... это стенография 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';
0 голосов
/ 18 мая 2017

это лучшее решение для 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>

Измените www.your-domain.com на свое имя dowmain.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...