DomainExtractor 模块提供了从主机字符串中提取域名和子域名信息的实用方法。Action Dispatch 内部使用此模块来解析主机名,并根据顶级域名 (TLD) 的长度将域名与子域名分开。
该模块假定域名结构标准,其中域名由以下部分组成:- 子域名(可选,可以有多层)- 域名- 顶级域名 (TLD,可以有多层,例如 .co.uk)
例如,在 “api.staging.example.co.uk” 中:- 子域名:[“api”, “staging”]- 域名:“example.co.uk”(tld_length=2)- TLD:“co.uk”
实例公共方法
domain_from(host, tld_length) 链接
从主机字符串中提取域名部分,包括指定数量的顶级域名组件。
域名包括主域名加上 TLD 组件。tld_length 参数指定了右侧有多少个组件应被视为 TLD 的一部分。
==== 参数
[host] 要从中提取域名的主机字符串。
[tld_length] 构成 TLD 的域名组件的数量。例如,对于 “.com” 使用 1,对于 “.co.uk” 使用 2。
==== 示例
# 标准 TLD (tld_length = 1) DomainExtractor.domain_from(“www.example.com”, 1) # => “example.com”
# 国家代码 TLD (tld_length = 2) DomainExtractor.domain_from(“www.example.co.uk”, 2) # => “example.co.uk”
# 多个子域名 DomainExtractor.domain_from(“api.staging.myapp.herokuapp.com”, 1) # => “herokuapp.com”
# 单个组件(返回主机本身) DomainExtractor.domain_from(“localhost”, 1) # => “localhost”
源码: 显示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/http/url.rb, line 64 def domain_from(host, tld_length) host.split(".").last(1 + tld_length).join(".") end
subdomains_from(host, tld_length) 链接
将主机字符串的子域名组件提取为 Array。
返回位于域名和 TLD 部分之前的所有组件。tld_length 参数用于确定域名的起始位置,以便将其之前的所有内容视为子域名。
==== 参数
[host] 要从中提取子域名的主机字符串。
[tld_length] 构成 TLD 的域名组件的数量。这会影响域名边界的计算。
==== 示例
# 标准 TLD (tld_length = 1) DomainExtractor.subdomains_from(“www.example.com”, 1) # => [“www”]
# 国家代码 TLD (tld_length = 2) DomainExtractor.subdomains_from(“api.staging.example.co.uk”, 2) # => [“api”, “staging”]
# 没有子域名 DomainExtractor.subdomains_from(“example.com”, 1) # => []
# 具有复杂 TLD 的单个子域名 DomainExtractor.subdomains_from(“www.mysite.co.uk”, 2) # => [“www”]
# 多层子域名 DomainExtractor.subdomains_from(“dev.api.staging.example.com”, 1) # => [“dev”, “api”, “staging”]
源码: 显示 | 在 GitHub 上
# File actionpack/lib/action_dispatch/http/url.rb, line 104 def subdomains_from(host, tld_length) parts = host.split(".") parts[0..-(tld_length + 2)] end