从 location.host 获取根域

Posted

技术标签:

【中文标题】从 location.host 获取根域【英文标题】:Get root domain from location.host 【发布时间】:2012-05-12 10:13:38 【问题描述】:

有很多 SO 问题似乎可以解决这个问题的变体。但它们往往是复杂的正则表达式答案,我希望我能找到更简单的东西。

给定 location.host 的值

foo.mysite.com
app.foo.mysite.com
mysite.com

如何获取根域mysite.com

我可以做一些事情,比如找到倒数第二个 .,但这看起来很难看,并且不适用于像 .co.uk 这样的任何 TLD。如果 jQuery 有一个包含这些信息的对象,我很乐意使用它。

我的目标是创建存在于所有子域中的 cookie。为此,我需要找到.mysite.com。我不想硬编码它。

【问题讨论】:

给定一个有效 TLD 的列表,这应该不难 - 而不是倒数第二个 .,您需要 TLD 之后的第一个 .(从右到左阅读)。您可以使用大的正则表达式或循环来做到这一点,但后者通常效率较低。 可以在此处找到完整列表:publicsuffix.org 我想无论您使用正则表达式还是其他方式都不会产生太大影响。在任何情况下,您都必须考虑所有公共 TLD 和 SLD。看看***.com/questions/4452916/…。 github.com/riffraff/publicsuffix.js 有一个项目可以执行此操作,但它声称“已损坏”。我还没有尝试过,但它可以构成您解决方案的基础。 @FelixKling - 谢谢,太好了。投票结束我自己的问题。 如果它真的对你有帮助,你也可以删除你的问题......只是说:)快乐编码! 【参考方案1】:

考虑到我们的域名从 .com 以外的任何地方更改的可能性极低,更不用说更改为 SLD,我在其中编写了类似的代码。

var temp = location.host.split('.').reverse();
var root_domain = '.' + temp[1] + '.' + temp[0];

维护 TLD 或 SLD 列表并与之进行比较的开销和维护对我们来说不值得。

【讨论】:

tldjs library 如果您想避免自己维护,可以使用。它基于 Mozilla 公共后缀列表 您可能希望使用location.hostname 而不是host - 请参阅***.com/questions/6725890/…【参考方案2】:

如果你想在一行上全部 -

document.domain.split('.').reverse().splice(0,2).reverse().join('.')

location.hostname.split('.').reverse().splice(0,2).reverse().join('.')

对于输入:'foo.example.com', 'foo.bar.example.com', 'foo.bar.fizz.buzz.example.com'

它将返回:'example.com'

【讨论】:

【参考方案3】:

您不能将 .co.uk 称为 TLD。它实际上是一个second level domain。因此,根域是什么总是模棱两可的。 但是,您可以列出所有可用的 TLD 和二级域并尝试查找匹配项。但这将是一项非常昂贵且乏味的操作。 如果你想这样做,这个List of TLDs and SLDs 可能会有用:

【讨论】:

【参考方案4】:

我一直在用这个:

const rootDomain = s => 
    const r =  /.*\.([^.]*[^0-9][^.]*\.[^.]*[^.0-9][^.]*$)/;
    return s.replace(r, '$1');
;

与上述使用拆分、反向等方法的输出类似,但它不会修改直接 IP 地址。

【讨论】:

【参考方案5】:
const rootDomain = '.' + window.location.hostname.split('.').slice(-2).join('.');

【讨论】:

虽然这段代码可能会解决问题,但一个好的答案还应该解释代码的什么以及它如何提供帮助。 @BDL 这段代码非常标准且不言自明。你还期待什么? 我建议将其缩减为 const rootDomain = location.hostname.split('.').slice(-2).join('.');

以上是关于从 location.host 获取根域的主要内容,如果未能解决你的问题,请参考以下文章

前端获得Url信息

两种js获取当前域名代码

js获取url协议url, 端口号等信息路由信息

document.location和window.location有啥区别

js获取当前域名

关于location对象