0

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

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

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

但是,当我将它与http://website.com一起使用时,它会返回“网站”作为子域。我怎样才能绝对确定如果没有该示例中的子域,它会返回 NULL?

谢谢!

4

3 回答 3

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 tc)

于 2013-08-05T13:43:57.077 回答
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']);

对我来说很好。基本上你需要使用爆炸限制参数。
细节和来源:phph.net - 爆炸手册

于 2013-08-05T14:04:20.970 回答
0

如果您有其他域,例如 a.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);
于 2014-01-29T03:44:59.720 回答