2012-11-11 54 views
5

在PHP中,如何檢查當前頁面是否在www中有www?如何檢查頁面網址是否有www或不使用PHP?

例如,如果用戶在http://www.example.com/something上,我怎麼能找到www中的URL和http://example.com/something,www是不是在url中?

+0

請記住,如果你使用任何的以下方法檢查,以確保$ _ SERVER [「HTTP_HOST」]做任何事情之前存在。 if(isset($ _ SERVER ['HTTP_HOST'])) 並非每個宿主環境都會填充該變量。我碰到了一些沒有的。最好同時使用HTTP_HOST和SERVER_NAME以確保您可以獲取域名進行檢查。 –

+0

@cryptic是否始終存在SERVER_NAME? –

+1

http://stackoverflow.com/questions/2297403/http-host-vs-server-name會給兩者一些很好的信息。如果沒有在Apache上設置SERVER_NAME,則將在IP上執行反向查詢。如果您的域名擁有專用IP,則應該解決域名更正問題,但如果域名是共享IP地址,則可能導致域名被返回爲不同的域名。 –

回答

1
array_shift(explode(".",$_SERVER['HTTP_HOST'])); 

應該工作,然後檢查數組是否存在www。如果您只是試圖刪除或強制www,那麼.htaccess規則遠遠優於PHP。

+0

HTTP_HOST是否包含www部分?我認爲它只包括域名。我可能錯了 –

+0

子域被認爲是主機的一部分,所以是的,它應該包含www – Andrew

+1

我只需回顯$ _SERVER ['HTTP_HOST']:http:// www。 ferdiaobrien.com/quick.php –

3

你知道這個網址嗎?從目前的請求頭,如果有 一個:然後藉此:

<?php 
$parsed = parse_url("http://www.example.com/something"); 
$hasWww = strpos($parsed['host'], "www.") === 0; 
var_dump($hasWww); 

否則,把主機的

strpos($_SERVER['HTTP_HOST'], "www.") === 0 
1

From the manual

$_SERVER['HTTP_HOST']

內容。

$_SERVER['SERVER_NAME']

服務器主機根據當前運行腳本是 執行的名稱。如果腳本正在虛擬主機上運行,​​那麼將爲該虛擬主機定義的值爲 。

6

你可以做一個preg_match這將是:

if(preg_match('/www/', $_SERVER['HTTP_HOST'])) 
{ 
    echo 'you got www in your adress'; 
} 
else 
{ 
    echo 'you don not have www'; 
} 

你甚至可以用這取決於你正在建設上面的選項會爲一個simpel檢測做精的.htaccess做到這一點。

,如果你選擇的選項Ferdia給做檢查如下:

$domain = array_shift(explode(".",$_SERVER['HTTP_HOST'])); 
if(in_array('www', $domain)) 
{ 
    echo 'JUP!'; 
} 
+1

你的正則表達式是錯誤的,如果他在www字符串末尾有www的地方會怎麼樣。檢查此:http://rubular.com/r/IEzoGnqEm1 – Matija

+0

他的問題是「www在網址」不提及它應該在一開始。但是,如果您只想在開始時匹配www,則正則表達式應爲:/^www / –

11

您可以使用$_SERVER['HTTP_HOST']讓您的域名。現在,如果您的網站不使用容易的子域名。只要使用這樣的事情:

$url1 = "www.domain.com"; 
$params = explode('.', $url1); 

if(sizeof($params === 3) AND $params[0] == 'www') { 
    // www exists 
} 

請注意,如果您的參數數組有2項,然後域看起來像這樣domain.com並沒有www清楚。您甚至可以檢查$params陣列的大小,並根據其大小確定是否存在www

現在,如果您的網站使用子域名,那麼它會變得更加複雜。你將不得不爲這些可能出現的情況:

$url1 = "www.domain.com"; 
$url2 = "www.sub.domain.com"; 
$url3 = "domain.com"; 
$url4 = "sub.domain.com"; 

然後你會再次爆發每個URL,並且比較大小,並檢查第一項是「WWW」。 但請注意,您的子域可能被命名爲www其中www將是子域:D 然後它會看起來像這樣:www.domain.com,再次,www是子域:)這是瘋了我幾乎瘋了這一個:)

無論如何,當網站沒有使用子域名來檢查www,這是蛋糕的和平。 但要檢查是否有網址和www您的網站是使用子域名,這可能是艱難的。 處理這一問題的最簡單的解決辦法是禁用www子域,如果你能。

如果您需要更多的幫助,這並不能回答你的問題,隨時問。 我有類似情況的用戶將能夠創建自己的帳戶,這將是子域名,如www.user.domain.com,我不得不做同樣的事情。

希望這會有所幫助!

1

有這麼多的方法來檢查WWW是否包含與否。

的方式之一是:

if(strpos($_SERVER['HTTP_HOST'], `www`) !== false) { 
    echo "WWW found"; 
} else { 
    echo "WWW not found"; 
} 
相關問題