如何在rails中获取子域值,是否有内置方法可以执行此操作?
e.g。
test123.example.com
我想要url的test123部分。
答案 0 :(得分:24)
Rails 3.0内置了此功能,您可以从request.subdomain
访问子域。
您还可以根据子域进行路由:
class SupportSubdomain
def self.matches?(request)
request.subdomain == "support"
end
end
Basecamp::Application.routes do
constraints(SupportSubdomain) do
match "/foo/bar", :to => "foo#bar"
end
end
如果您使用的是2.3,则需要使用subdomain-fu等插件。
答案 1 :(得分:7)
在控制器中使用以下方法
request.subdomains
返回子域数组
答案 2 :(得分:5)
答案 3 :(得分:3)
如果您正在使用字符串,并假设它可以是真正的URI,则可以执行此操作以提取子域。
require 'uri'
uri = URI.parse('http://test123.example.com')
uri.host.split('.').first
=> "test123"
答案 4 :(得分:2)
控制器中的简单操作只需执行以下操作
unless request.subdomains.any?
#No domains available redirect
redirect_to subdomain: 'www'
end
答案 5 :(得分:1)
您可以使用SubdomainFu plugin。这个插件为您提供了一个方法current_subdomain,它返回您应用的current_subdomain。
您还可以查看this Railscast
<强>更新强>
您还可以使用request.subdomains
这将为您提供一系列子域名。
答案 6 :(得分:1)
对于希望使用WEBrick在localhost上获取子域名的任何人:
将config.action_dispatch.tld_length = 0
放入config/environments/development.rb
,一切都应该有效。
链接到SO帖子: Can I make Rails / WEBrick recognize entries in /etc/hosts as subdomains (instead of domains)?
链接到Github帖子: https://github.com/rails/rails/issues/12438
答案 7 :(得分:0)
派对有点晚了,但这是我在旧版本的rails中使用的内容。
subdomain = request.subdomains.join('.')
它应该在较新版本中向后兼容
答案 8 :(得分:0)
具有子域的当前域:
"#{request.subdomain}.#{request.domain}"
# or
"#{request.subdomains.join(".")}.#{request.domain}"