$_SERVER['HTTP_HOST']在客戶的環境裏,取得的值老是程序所在的服務器在其局域網內的ip值解決方法

uchome的index文件中的二級域名功能判斷,使用了php的$_SERVER['HTTP_HOST'],開始對這個不是很瞭解,因此百度了一下,發現一篇帖子有點意思,轉發過來作個記錄。php

在php中,咱們通常經過$_SERVER['HTTP_HOST']來活得URL中網站的域名或者ip地址。php框架

php手冊中的解釋以下:

「HTTP_HOST」
當前請求的 Host: 頭信息的內容。 
服務器

通常來講,這樣子不會遇到什麼問題,在一些常見的php框架中,如PFC3和FLEA也是基於該預約義變量。框架

然而最近在作的一個項目,程序移交到客戶手裏測試時,居然發現程序的跳轉老是會出錯。測試

最後找出緣由:$_SERVER['HTTP_HOST']在客戶的環境裏,取得的值老是程序所在的服務器在其局域網內的ip值。網站

究其緣由,是由於,客戶的公司經過一臺服務器鏈接至因特網,而咱們的程序所在的服務器,是經過域名映射出來的,也就是中間有個「代理」的過程。所以$_SERVER['HTTP_HOST']在這樣的環境裏,取得的值老是程序所在的服務器在其局域網內的ip值。spa

最後查了很多資料,在symfony框架裏面,找到替代的實現方法:代理

將$host = $_SERVER['HTTP_HOST'];code

替換成:symfony

$host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');

便可。

相關文章
相關標籤/搜索