我目前正在使用以下内容来获取我网站的子域
$subdomain = array_shift(explode(".",$_SERVER['HTTP_HOST']));
当我将它用于http://www.website.com时,它会返回预期的“www”
但是,当我将它与http://website.com一起使用时,它会返回“网站”作为子域。我怎样才能绝对确定如果没有该示例中的子域,它会返回 NULL?
谢谢!
我目前正在使用以下内容来获取我网站的子域
$subdomain = array_shift(explode(".",$_SERVER['HTTP_HOST']));
当我将它用于http://www.website.com时,它会返回预期的“www”
但是,当我将它与http://website.com一起使用时,它会返回“网站”作为子域。我怎样才能绝对确定如果没有该示例中的子域,它会返回 NULL?
谢谢!
请注意,在通常情况下,您应该首先将 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)
做这个:
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 - 爆炸手册
如果您有其他域,例如 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);