2013-03-14 59 views
0

PHP中是否有任何预定义的方法来从url获取子域名?获取子域名,如果有的话

URL模式可能是:

http://www.sd.domain.com 
http://domain.com 
http://sd.domain.com 
http://domain.com 

其中,sd表示子doamin。

查阅方法必须针对每一种情况下返回不同的值:

壳体1 - >返回SD

壳体2 - >返回

案例3 - >返回SD

情况下4 - >返回

我发现了一些很好的联系

PHP function to get the subdomain of a URL

Get subdomain from url?

但并不具体适用于我的案件。

任何帮助将是最明显的。

感谢

回答

0

好吧,我在这里创建一个脚本:)

$url = $_SERVER['HTTP_HOST']; 
$host = explode('.', $url); 
if(!empty($host[0]) && $host[0] != 'www' && $host[0] != 'localhost'){ 
    $domain = $host[0]; 
}else{ 
    $domain = 'home'; 
} 
0

所以,有几种可能...

首先,当然正则表达式:

(http://)?(www\.)?([^\.]*?)\.?([^\.]+)\.([^\.]+) 

第三个括号中的条目将是您的子域。当然,如果你的网址是https://或者www2(看到这一切......),那么正则表达式会中断。所以这只是一个开始合作的初稿。

我的第二个想法是,就像你的,explode ing url。我认为是这样的:

function getSubdomain($url) { 
    $parts = explode('.', str_replace('http://', '', $url)); 
    if(count($parts) >= 3) { 
     return $parts[count($parts) - 3]; 
    } 
    return null; 
} 

我的这个功能背后的想法是,如果一个URL由.分裂子域几乎总是所得数组中的倒数第三项。该协议必须先剥离(见案例3)。当然,这当然可以做得更加优雅。

我希望我能给你一些想法。

0

试试这个。

[更新]我们有一个常量定义的_SITE_ADDRESS,如www.mysite.com,您可以使用这个字面意思。

它在我们的系统中运行良好,看起来像是什么目的。

public static function getSubDomain() 
{ 
    if($_SERVER["SERVER_NAME"] == str_ireplace('http://','',_SITE_ADDRESS)) return ''; //base domain 
    $host = str_ireplace(array("www.", _SITE_ADDRESS), "", strtolower(trim($_SERVER["HTTP_HOST"]))); 
    $sub = preg_replace('/\..*/', '', $host); 
    if($sub == $host) return ''; //this is likely an ip address 
    return $sub; 
} 

有对功能,但没有连接外部注,所以不好意思任何原开发商是谁的代码,这是基础上的。