PHP获取子域但不是实际域

时间:2013-08-05 13:32:43

标签: php subdomain

我目前正在使用以下内容获取我的网站的子域名

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

当我将其用于http://www.website.com时,它会返回预期的“www”

然而,当我在http://website.com使用它时,它返回“网站”作为子域。如何确保如果在该示例中没有子域,则返回NULL?

谢谢!

3 个答案:

答案 0 :(得分:2)

请注意,在常见情况下,您应首先将parse_url应用于传入数据 - 然后使用[host]键。至于你的问题,你可以使用这样的东西:

preg_match('/([^\.]+)\.[^\.]+\.[^\.]+$/', 'www.domain.com', $rgMatches);
//2-nd level check:
//preg_match('/([^\.]+)\.[^\.]+\.[^\.]+$/', 'domain.com', $rgMatches);
$sDomain = count($rgMatches)?$rgMatches[1]:null;

但我不确定这正是你所需要的(因为url可以包含第4个域级别的e.c.c。)

答案 1 :(得分:1)

这样做:

function getSubdomain($domain) {
    $expl = explode(".", $domain, -2);
    $sub = "";
    if(count($expl) > 0) {
        foreach($expl as $key => $value) {
            $sub = $sub.".".$value;

        }
        $sub = substr($sub, 1);
    }
    return $sub;
}
$subdomain = getSubdomain($_SERVER['HTTP_HOST']);

对我来说很好。基本上,您需要使用explode limit参数。
详情和来源:phph.net - explode manual

答案 2 :(得分:0)

如果您有其他域名,例如.net.org等,只需相应更改值

$site['uri'] = explode(".", str_replace('.com', '', $_SERVER['HTTP_HOST']) );
if( count($site['uri']) >0 ) {
    $site['subdomain'] = $site['uri'][0];
    $site['domain'] = $site['uri'][1];
    }
else  { 
    $site['subdomain'] = null;
    $site['domain'] = $site['uri'][0];
}
//For testing only:
print_r($site);

......或不(为了更大的灵活性):

$site['uri'] = explode(".", $_SERVER['HTTP_HOST'] );
if( count($site['uri']) > 2 ) {
    $site['subdomain'] = $site['uri'][0];
    $site['domain'] = $site['uri'][1];
    }
else  { 
    $site['subdomain'] = null;
    $site['domain'] = $site['uri'][0];
}
//For testing only:
print_r($site);