我目前正在使用以下内容获取我的网站的子域名
$subdomain = array_shift(explode(".",$_SERVER['HTTP_HOST']));
当我将其用于http://www.website.com时,它会返回预期的“www”
然而,当我在http://website.com使用它时,它返回“网站”作为子域。如何确保如果在该示例中没有子域,则返回NULL?
谢谢!
答案 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);