如何从URL获取子域值?

时间:2010-11-30 04:31:12

标签: ruby-on-rails

如何在rails中获取子域值,是否有内置方法可以执行此操作?

e.g。

test123.example.com

我想要url的test123部分。

9 个答案:

答案 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)

account_location也是一个不错的插件。使用后,您可以根据不同的子域找到该帐户。您只需在代码中编写

request.subdomains(0).first
即可从网址中找到子域名。

答案 3 :(得分:3)

如果您正在使用字符串,并假设它可以是真正的URI,则可以执行此操作以提取子域。

require 'uri'

uri = URI.parse('http://test123.example.com')
uri.host.split('.').first
=> "test123"

https://stackoverflow.com/a/13243810/3407381

答案 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}"