PHP $_SERVER['HTTP_HOST']詳解
在 PHP 的 $_SERVER 變量中,有一個 HTTP_HOST 鍵,用于獲取當(dāng)前請求的主機名或域名。HTTP_HOST 變量通常用于處理動態(tài)網(wǎng)站中的 URL,比如在一個多用戶的網(wǎng)站中,$_SERVER['HTTP_HOST'] 變量可以讓腳本區(qū)分使用哪個域名或子域名進行訪問,從而正確地輸出相應(yīng)的頁面。
HTTP_HOST 與其他服務(wù)器變量類似,是由 Web 服務(wù)器在請求頭部中設(shè)置傳遞給 PHP 的。在處理 HTTP 請求時,Web 服務(wù)器會提取請求頭部中的信息,并將其存儲在 $_SERVER 數(shù)組中,以供 PHP 腳本使用。下面是 HTTP 請求頭中常見的信息:
GET / HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Accept: */* Accept-Encoding: gzip, deflate, br Connection: keep-alive
在上面的請求頭中,Host: www.example.com 就是 HTTP 請求的 Host 頭部,也就是 $_SERVER['HTTP_HOST'] 所代表的內(nèi)容。$_SERVER['HTTP_HOST'] 的值通常是一個字符串,格式為 域名+端口號,但在沒有指定端口號的情況下,只會返回域名。比如:
// 不帶端口號 echo $_SERVER['HTTP_HOST']; // 輸出:www.example.com // 帶端口號 echo $_SERVER['HTTP_HOST']; // 輸出:www.example.com:8080
除了協(xié)議、域名和端口號之外,HTTP_HOST 還可以包含子域名,即如 www.example.com 中的 www 部分。如果想統(tǒng)一處理所有子域名,可以使用正則表達式來匹配不同的模式。比如:
// 精確匹配 www if ($_SERVER['HTTP_HOST'] === 'www.example.com') { echo '歡迎訪問 www.example.com'; } // 匹配所有子域名 if (preg_match('/\w+.example.com/', $_SERVER['HTTP_HOST'])) { echo '歡迎訪問 example.com 的子域名'; }
除了 HTTP_HOST 外,$_SERVER 還包含了許多其他有用的變量,比如 HTTP_REFERER、HTTP_USER_AGENT 等。學(xué)習(xí)它們的用法和含義,有助于更好地理解 Web 開發(fā)中的請求與響應(yīng)機制。