3

我有一个dev.example.com带有通配符子域的静态域,像这样*.dev.example.com

我需要检测当前通配符子域的名称。那么,如果我正在浏览sub.dev.example.com如何获得“子”?

$env_domain = dev.example.com;
$subdomain = array_shift( explode( '.', $_SERVER['HTTP_HOST'] ) ) .'.'. $env_domain;
echo $subdomain;

目前,这返回dev. 我需要它返回sub

我认为这里的最佳做法是返回最低级别的域(第一个子域)。

请注意,我解析的不是 URL,而是给定的域。

4

5 回答 5

4
$domain = 'sub.dev.example.com';
$tmp = explode('.', $domain);
$subdomain = current($tmp);
print($subdomain);     // prints "sub"
于 2012-12-12T04:11:52.587 回答
3

这是该问题的另一个简单解决方案。

echo array_shift((explode(".",$_SERVER['HTTP_HOST'])));
于 2015-10-02T08:30:42.880 回答
2

我认为使用parse_url函数是更好的方法:

getUrlSubdomain($url){
    $urlSegments = parse_url($url);
    $urlHostSegments = explode('.', $urlSegments['host']);

    if(count($urlHostSegments) > 2) {
        return $urlHostSegments[0];
    }
    else{
        return null;
    }
}
于 2013-05-15T22:21:19.030 回答
1

这是一个可以解决问题的小功能。只需将 $_SERVER['HTTP_HOST'] 粘贴到函数中,您应该得到您想要的

function getSubDomain ($domain) {
    $eDom = explode('.', $domain);
    return $eDom[0];
}

echo getSubDomain('sub.dev.example.com'); // echo 'sub' 
于 2012-12-12T04:38:02.390 回答
0

从 PHP 5.3 开始,您可以使用带有 true 参数的 strstr()

echo strstr('sub.dev.example.com', '.', true); //prints sub

原始链接

于 2014-07-16T19:24:53.583 回答