it-swarm.com.de

PHP Site-URL-Protokoll abrufen - http vs https

Ich habe eine kleine Funktion zum Einrichten des aktuellen Site-URL-Protokolls geschrieben, aber ich habe kein SSL und weiß nicht, wie ich testen soll, ob es unter https funktioniert. Kannst du mir sagen, ob das richtig ist?

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

Muss es wie oben gemacht werden oder kann ich es einfach so machen?:

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

Konvertiert der Server unter SSL die URL nicht automatisch in https, selbst wenn die Anchor-Tag-URL http verwendet? Muss das Protokoll überprüft werden?

Danke!

188
anon445699

Es ist nicht automatisch. Ihre Top-Funktion sieht in Ordnung aus.

69
profitphp

Ich weiß, dass es spät ist, obwohl es viel bequemer ist, diese Art von Problem zu lösen! Die oben gezeigten Lösungen sind ziemlich chaotisch, und wenn jemand darauf zurückkommen sollte, würde ich Folgendes tun:

$protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === 0 ? 'https://' : 'http://';

oder auch ohne Bedingung, wenn Sie nicht mögen

$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,strpos( $_SERVER["SERVER_PROTOCOL"],'/'))).'://';

Schauen Sie sich $_SERVER["SERVER_PROTOCOL"]

84
Ivo

Das funktioniert bei mir

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://';
}
62
Rid Iculous

Einige Veränderungen:

function siteURL() {
  $protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || 
    $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
  $domainName = $_SERVER['HTTP_Host'];
  return $protocol.$domainName;
}
25
Anoop K

kurzer Weg

$scheme = $_SERVER['REQUEST_SCHEME'] . '://';
16
softcod.com

Da das Testen der Portnummer meiner Meinung nach keine gute Praxis ist, lautet meine Lösung:

define('HTTPS', isset($_SERVER['HTTPS']) && filter_var($_SERVER['HTTPS'], FILTER_VALIDATE_BOOLEAN));

Die HTTPSKonstante gibt TRUE zurück, wenn $_SERVER['HTTPS'] ist gesetzt und entspricht "1", "true", "on" oder "yes". Gibt ansonsten FALSE zurück.

7
alex

Für jedes System mit Ausnahme von IIS reicht dies völlig aus, um die eigene URL der Site zu definieren:

$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['HTTP_Host'].'/';

oder

$siteURL='http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].'/';

hängt davon ab, was Sie genau wollen: HTTP_Host vs. SERVER_NAME

6

Im Falle eines Vertreters der SERVER_PORT gibt möglicherweise nicht den richtigen Wert an, daher hat dies für mich funktioniert -

$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTP_X_FORWARDED_PORT'] == 443) ? "https://" : "http://"
5
Harshit

Verwenden Sie diese Servervariable, um die Protokolldetails abzurufen:

 $scheme = $_SERVER['REQUEST_SCHEME'] . '://';
 echo $scheme; //it gives http:// or https://

Beachten Sie, dass diese Servervariable unzuverlässig ist. Weitere Informationen finden Sie unter: Ist $ _SERVER ['REQUEST_SCHEME'] zuverlässig?

4
shashik493

habe eine Funktion mit der Antwort von Rid Iculous erstellt, die auf meinem System funktioniert hat.

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://';
}

Ich hoffe es hilft

2
miyuru
$protocal = 'http';
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || $_SERVER['HTTPS'] == 'on') {$protocal = 'https';}


echo $protocal;

Ich weiß, dass dies eine alte Frage ist, aber ich bin heute darauf gestoßen, da ich dies auf meiner Website testen musste. Die obigen Antworten scheinen unnötig kompliziert zu sein. Um das Site-Protokoll einzurichten, müssen Sie lediglich $_SERVER['HTTPS'] Testen.

Wenn das Protokoll HTTPS verwendet, wird $_SERVER['HTTPS'] Auf "Ein" zurückgesetzt. Wenn nicht, bleibt die Variable leer. Zum Beispiel:
// 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';
} 
 </ Code>

Sie können das oben Genannte verwenden, um einfach und sauber auf HTTPS zu testen und entsprechend zu implementieren. :)

2
Rob Stocki

Ich habe das am häufigsten gestimmt r getestet und es hat bei mir nicht funktioniert . Am Ende habe ich Folgendes verwendet:

$protocol = isset($_SERVER['HTTPS']) ? 'https://' : 'http://';
1
Pedro Lobito

Aus CodeIgniter extrahiert:

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
Guillaume

Hier ist, wie ich es mache ... es ist ein Kurzformif else Version von Rid Iculous's Antwort ...

$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
Scotty G

es ist die beste Lösung von https oder http. Verwenden Sie dies:

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

Kann jedoch weder https noch http anzeigen, sodass nur der Inhalt Ihrer Website wie ein Bild usw. verlinkt wird.

wenn Sie Ihre Site in https umleiten möchten, fügen Sie diesen Code in die .htaccess-Datei ein:

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

Ändern Sie www.Ihre-Domain.com mit Ihrem Dowmain-Namen.

0
Jhoel Rhocher