33

我如何使用 javascriptexample.com从一组可能的子域中获取域名sub1.example.com sub2.example.com sub3.example.com ...?

4

7 回答 7

87
var parts = location.hostname.split('.');
var subdomain = parts.shift();
var upperleveldomain = parts.join('.');

要仅获取二级域,您可以使用

var parts = location.hostname.split('.');
var sndleveldomain = parts.slice(-2).join('.');
于 2012-11-13T19:44:01.337 回答
5

接受的答案将有助于获得二级域。但是,您可能需要考虑一些称为“公共后缀”的东西。否则,您可能会得到意想不到的错误结果。

例如,以域www.amazon.co.uk. 如果你只是尝试获得二级域名,你最终会得到co.uk,这可能不是你想要的。那是因为co.uk它是一个“公共后缀”,这意味着它本质上是一个顶级域。以下是公共后缀的定义,取自https://publicsuffix.org

“公共后缀”是互联网用户可以(或历史上可以)直接注册名称的后缀。

如果这是您的应用程序的关键部分,我会研究类似psl( https://github.com/lupomontero/psl ) 的域解析。它适用于 nodejs 和浏览器,并在 Mozilla 维护的公共后缀列表上进行了测试。

这是他们自述文件中的一个简单示例:

var psl = require('psl');

// TLD with some 2-level rules.
psl.get('uk.com'); // null);
psl.get('example.uk.com'); // 'example.uk.com');
psl.get('b.example.uk.com'); // 'example.uk.com');
于 2020-02-29T23:06:25.340 回答
4

这更快

const firstDotIndex = subDomain.indexOf('.');
const domain = subDomain.substring(firstDotIndex + 1);
于 2017-04-05T17:55:43.107 回答
1

此处解释了通用解决方案http://rosscrivener.co.uk/blog/javascript-get-domain-exclude-subdomain 从上面的链接

var domain = (function(){
   var i=0,domain=document.domain,p=domain.split('.'),s='_gd'+(new Date()).getTime();
   while(i<(p.length-1) && document.cookie.indexOf(s+'='+s)==-1){
      domain = p.slice(-1-(++i)).join('.');
      document.cookie = s+"="+s+";domain="+domain+";";
   }
   document.cookie = s+"=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain="+domain+";";
   return domain;
})();
于 2018-03-13T12:47:03.567 回答
0

    function getDomain() {
        const hostnameArray = window.location.hostname.split('.')
        const numberOfSubdomains = hostnameArray.length - 2
        return hostnameArray.length === 2 ? window.location.hostname : hostnameArray.slice(numberOfSubdomains).join('.')
    }
    console.log(getDomain());

这将删除所有子域,因此“abcdtest.com”将变为“test.com”

于 2020-02-14T14:16:23.157 回答
0

如果要验证特定子域是否存在

var parts = location.hostname.split('.');
if(parts.includes('subdomain_to_search_here')){
   //yes
}else{
   //no
}
于 2021-01-22T20:06:22.367 回答
0

一些更强大的版本,它与子域计数无关

function getDomain() {
   const hostname = window.location.hostname.split('.');
   domain.reverse();
   return `${hostname[1]}.${hostname[0]}`;
}
于 2022-02-25T16:04:23.150 回答