問題:
使用者建立了一個函數來建立目前網站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):
但是,有一種更簡潔的方法可以達到相同的結果:
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中文網其他相關文章!