开发者

How to get the subdomain value from a url?

开发者 https://www.devze.com 2023-01-27 18:29 出处:网络
how can I开发者_Go百科 get the subdomain value in rails, is there a built-in way to do this? e.g.

how can I开发者_Go百科 get the subdomain value in rails, is there a built-in way to do this?

e.g.

test123.example.com

I want the test123 part of the url.


Rails 3.0 has this capability built-in, you can access the subdomain from request.subdomain.

You can also route based on the 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

If you're using 2.3, you'll need to use a plugin such as subdomain-fu.


Use the following method inside your controller

request.subdomains

This Returns an array of subdomains


account_location is also a good plugin. After using it, you can find the account based on different subdomains. And you can find out subdomain from url just by writing

request.subdomains(0).first
in your code.


In case you are working with a string, and assuming it can be a true URI, you can do this to extract the subdomain.

require 'uri'

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

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


Simple in your controller just do the following

unless request.subdomains.any?
   #No domains available redirect
   redirect_to subdomain: 'www'
end


You can use the SubdomainFu plugin. This plugin gives you a method current_subdomain which returns the current_subdomain of your app.

You can also have a look at this Railscast

UPDATE

You can also use request.subdomains this will give you an array of subdomains.


For anyone looking to get the subdomains on localhost using WEBrick:

Put config.action_dispatch.tld_length = 0 into config/environments/development.rb and everything should work.

Link to SO post here: Can I make Rails / WEBrick recognize entries in /etc/hosts as subdomains (instead of domains)?

Link to Github post: https://github.com/rails/rails/issues/12438


current domain with subdomains:

"#{request.subdomain}.#{request.domain}"
# or
"#{request.subdomains.join(".")}.#{request.domain}"


A bit late to the party but here's what I used in older versions of rails.

subdomain = request.subdomains.join('.')

It should be backwards compatible in newer versions

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号