尝试使用php获取子域URL

时间:2018-07-06 15:50:44

标签: php url subdomain

实际上,我正在尝试使用php获取子域URL。我在下面写代码:

$sub_url = explode('.', $_SERVER['HTTP_HOST']);
$suburl = $sub_url[0];

例如: 如果子域网址类似于my.example.com 上面的代码给我my很好,但是如果没有子域,那么我的代码将返回example不好。

我想要第一个点之前的任何内容,甚至是www,但是如果没有类似URL为example.com的内容,那么我想要一个空白值而不是example

3 个答案:

答案 0 :(得分:4)

这里是获取子域的单线代码:

remote: !   No such app as this-testingapp.
具有限制参数$subdomain = join('.', explode('.', $_SERVER['HTTP_HOST'], -2))

explode将在每个点上拆分字符串,而忽略最后两个元素。如果有两个或更少的元素,它将返回一个空数组。

-2将结果数组重新组合成点分隔的字符串。如果您设置了多个子域,例如join将返回foo.bar.domain.com

如果没有子域,它将返回一个空字符串。

答案 1 :(得分:1)

我假设您可以检查数组的大小,假设它总是相同的大小,如果更大,则可能会遇到问题。

$sub_url = explode('.', $_SERVER['HTTP_HOST']);

if (sizeof($sub_url) > 2) {
    $suburl = $sub_url[0];
} else {
    $suburl = null;
}

答案 2 :(得分:0)

您应该注意到,还有一些具有二级域名的网站,例如co.ukcom.cn。如果可以确保不会在此类网站上使用您的代码,则可以简单地使用DarthJDG的答案或选中count($sub_url) > 2。但是,如果没有,则需要检查域名。

$secondLevelDomainsList = str_getcsv(file_get_contents('https://raw.github.com/gavingmiller/second-level-domains/master/SLDs.csv'), PHP_EOL);
foreach($secondLevelDomainsList as &$item) {
    list($tld, $stld) = str_getcsv($item, ",");
    $item = $stld;
}    
$urlParts = explode('.', $url);    
$challenger = '.' . join('.', array_slice($urlParts, -2, 2, true));    
$length = in_array($challenger, $secondLevelDomainsList) ? -3 : -2;    
$subDomainName = join('.', array_slice($urlParts, 0, $length, true));

如果域是二级域,则使用gavingmiller/second-level-domains github存储库中CSV格式的二级域列表进行测试。