2011-02-16 34 views
4

我的公司使用一塊基於PHP的軟件,該軟件取決於$_SERVER['SERVER_NAME']來構建URL。它在Windows Server 2003或2008上通過FastCGI與IIS6或IIS7在PHP 5.2上運行。

在我們安裝過的每個IIS系統上,它都能「正確」(或者至少,我們期望它能夠工作)。換句話說,在同一臺服務器上,如果你有http://app.foo.com/myscript.php調用它,$_SERVER['SERVER_NAME']是「app.foo.com」,如果你有http://192.168.1.22/myscript.php調用它,$_SERVER['SERVER_NAME']是「192.168.1.22」等

今天,我們有史以來第一次將它安裝在服務器(Windows Server 2003和IIS6)上,這種服務器的行爲不同。無論我們使用哪個URL來加載腳本,$ _SERVER ['SERVER_NAME']都是'myserver'(服務器的機器名),這會導致問題。

現在這個問題出現了,我們正在努力消除在未來的軟件版本中使用$_SERVER['SERVER_NAME'] ...但是有沒有我可以執行的任何配置(在IIS6中,php.ini,... ?)在此服務器上解決此問題?如果我們無法對其進行更改以使$_SERVER['SERVER_NAME']始終包含來自請求URL的主機,是否至少有某種方式來配置它,以便$_SERVER['SERVER_NAME']將包含特定的所需FQDN('app.foo.com'而不是'myserver' )?

編輯:添加一個賞金,因爲我非常有興趣接收這個問題的答案。

+1

你可以看看`$ _SERVER [「HTTP_HOST」]``**客戶端設置的大**警告,可以自由篡改。也許如果你有一個有效的主機陣列(如果這不會影響你正在做的事情的目的)...... – 2011-02-16 18:24:10

+0

當前腳本正在執行的服務器主機的名稱。如果腳本在虛擬主機上運行,​​則這將是爲該虛擬主機定義的值。您可能需要修改您的IIS虛擬主機設置 – ajreal 2011-02-16 18:35:33

+0

不知道IIS,但在Apache上,$ _SERVER ['SERVER_NAME']是在該虛擬主機的「ServerName」httpd.conf選項中設置的值。 IIS必須具有類似的設置虛擬主機的實際名稱。 – 2011-02-16 18:36:38

回答

0

嘗試使用$_SERVER['HTTP_HOST']或者如果不起作用,請使用$_SERVER['SCRIPT_URI']parse_url()

2

但是在這臺服務器上可以執行的任何配置(在IIS6中,php.ini,...?)來解決這個問題嗎?

如$ _ SERVER的全局變量實際上是可寫的,所以作爲一個短期的解決辦法只是把事情的工作,你可以插入一些快速的PHP代碼專門設置SERVER_NAME關鍵看你需要爲網站的價值工作。

例如,在你打開PHP文件,你可以只包含行:

$_SERVER['SERVER_NAME'] = 'app.foo.com'; 

所有後續調用$ _ SERVER [「SERVER_NAME」]將有你想要的值。

如果您需要考慮IP訪問,則可以使用REQUEST_URI,parse_url()或HTTP_HOST(如果可用)的組合。

長期,從代碼庫擺脫SERVER_NAME的可能會有助於降低你的血壓:)

0

以及據我聽說,$_SERVER['SERVER_NAME']給服務器配置文件中定義並沒有告訴價值你有關於請求的任何事情。而$_SERVER['HTTP_HOST']爲您提供當前請求正在滿足的域名,並且與請求更直接相關。

下面是一個例子,以更清楚地瞭解這兩件事情。假設您在服務器中定義了一個主機,其中ServerNamedomain.comIP address198.16.120.100

下面是這兩個變量之間的不同:

for http://www.domain.com 

$_SERVER['SERVER_NAME'] = domain.com 
$_SERVER['HTTP_HOST'] = www.domain.com 

for http://198.16.120.100 

$_SERVER['SERVER_NAME'] = domain.com 
$_SERVER['HTTP_HOST'] = 198.16.120.100 

如果你想改變你的IIS服務器的SERVER_NAME我想這link會幫助你。

如果您需要更多,請不要猶豫。

問候

0

請嘗試設置主機頭在IIS 6.0並測試它Reference

注:$_SERVER是含有如頁眉,路徑和腳本位置的信息的陣列。該數組中的條目由Web服務器創建。不能保證每個Web服務器都能提供這些內容;服務器可能會省略一些,或者提供這裏沒有列出的其他人。也就是說,這些變量中有很大一部分在CGI/1.1 specification中,因此您應該能夠期待這些變量。

必須將SERVER_NAME變量設置爲客戶端請求所針對的服務器主機 的名稱。這是一個不區分大小寫的主機名或網絡地址。它構成了Script-URI的主機部分。

SERVER_NAME = server-name 
    server-name = hostname | ipv4-address | ("[" ipv6-address "]") 

甲部署服務器可以具有用於此 變量,其中幾個HTTP虛擬主機共享相同的IP地址一個以上的可能值。 在這種情況下,服務器將使用請求的主機 標題字段的內容來選擇正確的虛擬主機。

相關問題