218 votes

Protocole PHP Get Site URL - http vs https

J'ai écrit une petite fonction pour établir le protocole de l'url du site actuel mais je n'ai pas de SSL et je ne sais pas comment tester si cela fonctionne sous https. Pouvez-vous me dire si c'est correct ?

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() );

Est-il nécessaire de le faire comme ci-dessus ou puis-je simplement le faire comme ?

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

Sous SSL, le serveur ne convertit-il pas automatiquement l'URL en https même si l'URL de la balise d'ancrage utilise http ? Est-il nécessaire de vérifier le protocole ?

Merci !

1voto

koalaok Points 1100

Je pense que le func complet devrait ressembler à :

function siteURL()
{
    $protocol =  "http://";
    if (
        //straight
        isset($_SERVER['HTTPS']) && in_array($_SERVER['HTTPS'], ['on', 1])
        ||
        //proxy forwarding
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'
    ) {
        $protocol = 'https://';
    }

    $domainName = $_SERVER['HTTP_HOST'];
    return $protocol . $domainName;
}

Notes :

  • vous devez également rechercher HTTP_X_FORWARDED_PROTO (par exemple, si le serveur proxy serveur)
  • s'appuyant sur le port 443 n'est pas sûr (https pourrait être servi sur port différent)
  • REQUEST_SCHEME non fiable

0voto

Jhoel Rhocher Points 1

C'est la meilleure solution de https ou http utiliser ce :

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

Mais il ne peut pas afficher https ou http, il ne sert donc qu'à lier le contenu de votre site, comme les images, etc.

si vous voulez rediriger votre site en https, ajoutez ce code dans le fichier .htaccess :

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

Changement www.your-domain.com avec votre nom dowmain.

0voto

Jonathan Points 481

Je sais que je suis un peu en retard à cette fête, mais si vous préférez ne pas utiliser $_SERVER, c'est fortement déconseillé, et même désactivé sur certains frameworks PHP ; et si vous avez un serveur web apache, vous pouvez utiliser sa commande native de la manière suivante : -

$protocol = apache_getenv('HTTPS') ? 'https:' : 'http:';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X