跳至内容 跳至搜索

DomainExtractor 模块提供了从主机字符串中提取域名和子域名信息的实用方法。Action Dispatch 内部使用此模块来解析主机名,并根据顶级域名 (TLD) 的长度将域名与子域名分开。

该模块假定域名结构标准,其中域名由以下部分组成:- 子域名(可选,可以有多层)- 域名- 顶级域名 (TLD,可以有多层,例如 .co.uk)

例如,在 “api.staging.example.co.uk” 中:- 子域名:[“api”, “staging”]- 域名:“example.co.uk”(tld_length=2)- TLD:“co.uk”

方法
D
S

实例公共方法

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”

# 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”]

# 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