首頁  >  文章  >  後端開發  >  如何在 PHP 中確定目前網站 URL 協定:此函數正確嗎?

如何在 PHP 中確定目前網站 URL 協定:此函數正確嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-27 16:58:02776瀏覽

 How to Determine the Current Site URL Protocol in PHP: Is this Function Correct?

PHP 取得網站URL 協定- http 與https

問題:

使用者建立了一個函數來建立目前網站URL 協議,但不確定它是否在HTTPS 下工作,因為它們沒有SSL。他們問他們的函數是否正確:

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

答案:

提供的函數是正確的,可以根據以下條件有效判斷協議(http或https):

  • 如果$_SERVER['HTTPS']不為空且不等於'off '
  • 如果$_SERVER['SERVER_PORT'] 等於443

但是,有一種更簡潔的方法可以達到相同的結果:

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

此程式碼檢查$ _SERVER['HTTPS'] 是否存在以及其值是否為“on”或1。 它還檢查 $_SERVER['HTTP_X_FORWARDED_PROTO'] 是否存在及其值是否為“https” '。當網站使用 HTTPS,但無法透過 $_SERVER['HTTPS'] 直接存取該協定時,就會發生這種情況。

以上是如何在 PHP 中確定目前網站 URL 協定:此函數正確嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn