我发现这个名为URI的模块可以解析网址。 (我对ruby很新。在这种情况下,'module'是'library'的同义词吗?)然后你可以提取主机名。
uri = URI.parse("http://www.ruby-lang.org/")
...
p uri.host
# => "www.ruby-lang.org"
据此,我想你可以删除'www。'并使用正则表达式保留其他子域。
有没有人有更直接的选择,或者这种做法是否正确?
答案 0 :(得分:8)
因此,在发布我自己的答案时,我并不是说像domainatrix或public_suffix_server这样的宝石并不是优雅的解决方案(尽管后者立即对我造成了影响,导致我走这条路)。
人们建议使用split()让我意识到我可以放弃'www。'如果它存在并以其他方式保留域而不安装gem并使用一行简单的代码:
url = request.original_url
domain = URI.parse(url).host.sub(/\Awww\./, '')
这适用于子域和多部分后缀(例如co.uk)。有人看到这个有什么不对吗?
编辑:感谢sorens指出我最初使用的弱正则表达式。这个表达当然更好。
答案 1 :(得分:4)
你可以使用domainatrix gem来获得你想要的东西:url.domain + url.public_suffix
,但你可以像uri[4..-1]
那样进行一些字符串操作。