获取子域Javascript的域名

Ale*_*sov 24 javascript subdomain dns jquery

我如何 使用javascript example.com从可能的子域名集中获取域名sub1.example.com sub2.example.com sub3.example.com

Ber*_*rgi 73

var parts = location.hostname.split('.');
var subdomain = parts.shift();
var upperleveldomain = parts.join('.');
Run Code Online (Sandbox Code Playgroud)

要获得只有二级域名,您可以使用

var sndleveldomain = parts.slice(-2).join('.');
Run Code Online (Sandbox Code Playgroud)

  • @Bergi - 我知道OP用于域名而不是IP地址,但我只想指出虽然这对于命名地址很有用,但它不适用于基于IP的地址并且不正确地分解它们(即127.0) .0.1返回"0.1"). (5认同)
  • @HankYang:`co.uk` 是子域(二级域),我的代码段也适用于此。如果您正在寻找有效的二级域名,则必须在您的应用程序中加入 [公共后缀列表](https://publicsuffix.org/)。 (2认同)

fab*_*aws 5

这更快

const firstDotIndex = subDomain.indexOf('.');
const domain = subDomain.substring(firstDotIndex + 1);
Run Code Online (Sandbox Code Playgroud)


kim*_*mbo 5

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

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

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

如果这是您的应用程序的关键部分,我会研究类似pslhttps://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');
Run Code Online (Sandbox Code Playgroud)