获取子域名(如果有)

时间:2013-03-14 06:52:24

标签: php

PHP中是否有任何预定义方法可以从url获取子域?

url模式可能是:

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

其中sd代表sub-doamin。

现在,方法必须为每种情况返回不同的值:

  

案例1 - >返回 sd

     

案例2 - >返回 false 为空

     

案例3 - >返回 sd

     

案例4 - >返回 false 为空

我找到了一些很好的链接

PHP function to get the subdomain of a URL

Get subdomain from url?

但并非特别适用于我的案件。

任何帮助都会非常明显。

由于

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

所以,有几种可能性......

首先,当然是正则表达式:

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

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

我的第二个想法是,和你一样,explode网址。我想到了这样的事情:

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

我在这个函数背后的想法是,如果一个url被.拆分,那么子域几乎总是在结果数组中的第三个最后一个条目。必须首先剥离协议(参见案例3)。当然,这当然可以做得更优雅。

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

答案 2 :(得分:0)

试试这个。

[update]我们有一个常量定义的_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;
}

关于该功能有一个外部注释,但没有链接,对于任何原始开发人员,我很抱歉这是基于它的代码。