2012-10-21 197 views
2

我需要從URL中獲得一些價值..
一樣,如果網址是http://www.random.mysite.com/從url獲取子域名?

然後不知何故,我想random

但這應該藏漢工作,如果它使用wwwhttp://https://在前期的url ..

那麼,如何才能做到這一點?

我嘗試這樣做: array_shift(explode(".",$_SERVER['HTTP_HOST']));

它的工作原理如果URL http://random.mysite.com/,但如果我把前期www,然後我得到www回來呢?

任何想法?

+0

檢查,如果你已經有了'www'如果是的話,就再次與爆炸零件的其餘部分重複這個過程?或者你可以使用[正則表達式](http://bg2.php.net/manual/en/book.pcre.php)。 – lanzz

回答

4

您可以嘗試

$url = 'http://random.mysite.com/'; 
$url = parse_url($url,PHP_URL_HOST); 
$url = strstr(str_replace("www.","",$url), ".",true); 
var_dump($url); 
2

您可以使用parse_url先取得http://https://之後的所有內容。

然後,使用explode將域分割成不同的元素。對於以www開頭的特殊情況,請檢查展開陣列中第一個項目的值。如果第一個是www,那麼第二個必須是子域。

$url = 'http://www.sub.yourwebsite.com'; 
$parsed = parse_url($url); 
$domain = explode('.', $parsed['host']); 
$subdomain = ''; 

if ($domain[0] == 'www') 
    $subdomain = $domain[1]; 
else 
    $subdomain = $domain[0]; 
+0

這對於非http URL不起作用。 OP還需要解析URL而不使用方案。 –

+0

它適用於https://,https:// www.,http://和http:// www.'。 OP,如果指定的URL是任何其他情況,您能否告知我們? –

+0

我不確定OP需要什麼。但是,如果用戶輸入「www.stacoverflow.com」(這裏沒有http://),我認爲OP希望從中獲得「www」。問題是,parse_url不適用於這樣的URL。 –

3

沒有http [s]://前面的URL不是URL。他們是字符串。

$hostname = preg_replace('~^https?://(www\\.)?~i', null, $url); // shift scheme and www 
$hostname = preg_replace('~#.*$~', null, $hostname); // pop target 
$hostname = preg_replace('~\\?.*$~', null, $hostname); // pop query string 
$hostname = preg_replace('~/.*$~', null, $hostname); // pop uri 
// no guarantee it's a valid hostname, there's more checks you can do here 

試試這個。爲什麼三個步驟?爲了表達清楚,所以你明白它的作用,並且當你沒有/和a時,迎合複雜的情況。直。順序也很重要。它可以在一次罷工中結合使用,但你需要一些測試才能做到這一點......當你颳了一點時,有太多格式不正確的URL。

1

不是選擇域的第一部分,並檢查它是否是www,你也可以從後面開始。爆炸域名後,最後一部分是'com',之前的部分是'yoursite'。之前的部分是「隨機」或「www」。 'www'本身就是一個子域名,你甚至可以說'www.random'與'random'是不同的子域名。

缺點是頂級域名可以是'.com',但也可以是'.co.uk',在這種情況下,'yoursite'將被視爲子域名,但它不是真的。

您經常看到的特別是在可用於多個站點的框架或庫中的設置可讓您指定主要主機名(yoursite.com)。這樣,您可以輕鬆得出結論:protocol://和該主機名之間的所有內容都是您的子域。

+0

你能告訴我任何將從URL中提取主機名的庫嗎? –

2

根據您的需要,更清晰的解決方案可能是確保您首先提供一致的URL。重定向所有http://yoursite.comhttp://www.yoursite.com把它放在你的.htaccess文件中(假設你使用apache的根目錄下)。

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^your-site.com [NC] 
RewriteRule ^(.*)$ http://www.your-site.com/$1 [L,R=301] 

此代碼的更多變化here。這對搜索引擎優化也有一些幫助,並且通常是很好的做法。