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

Mary-Kate Olsen
發布: 2024-10-27 16:58:02
原創
775 人瀏覽過

 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!