实际上,我正在尝试使用php获取子域URL。我在下面写代码:
$sub_url = explode('.', $_SERVER['HTTP_HOST']);
$suburl = $sub_url[0];
例如:
如果子域网址类似于my.example.com
上面的代码给我my
很好,但是如果没有子域,那么我的代码将返回example
不好。
我想要第一个点之前的任何内容,甚至是www
,但是如果没有类似URL为example.com
的内容,那么我想要一个空白值而不是example
。
答案 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.uk
,com.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格式的二级域列表进行测试。