Как получить значение субдомена из URL? - PullRequest
20 голосов
/ 30 ноября 2010

как я могу получить значение субдомена в rails, есть ли встроенный способ сделать это?

, например

test123.example.com

Мне нужна часть URL test123.

Ответы [ 8 ]

24 голосов
/ 30 ноября 2010

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 .

7 голосов
/ 28 марта 2016

Используйте следующий метод внутри вашего контроллера

request.subdomains

Возвращает массив поддоменов

5 голосов
/ 30 ноября 2010

account_location также является хорошим плагином.После его использования вы можете найти аккаунт на основе разных поддоменов.И вы можете узнать поддомен из URL, просто написав

request.subdomains(0).first
в своем коде.
3 голосов
/ 14 января 2016

Если вы работаете со строкой и предполагаете, что это может быть истинный URI, вы можете сделать это, чтобы извлечь поддомен.

require 'uri'

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

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

2 голосов
/ 19 октября 2014

Просто в вашем контроллере просто сделайте следующее

unless request.subdomains.any?
   #No domains available redirect
   redirect_to subdomain: 'www'
end
1 голос
/ 26 июня 2015

Для тех, кто хочет получить поддомен на localhost с помощью WEBrick:

Поместите config.action_dispatch.tld_length = 0 в config/environments/development.rb, и все должно работать.

Ссылка на SO сообщение здесь: МожетЯ заставляю Rails / WEBrick распознавать записи в / etc / hosts как субдомены (вместо доменов)?

Ссылка на пост Github: https://github.com/rails/rails/issues/12438

1 голос
/ 30 ноября 2010

Вы можете использовать плагин SubdomainFu . Этот плагин предоставляет вам метод current_subdomain, который возвращает current_subdomain вашего приложения.

Вы также можете взглянуть на этот Railscast

UPDATE

Вы также можете использовать request.subdomains, это даст вам массив поддоменов.

0 голосов
/ 08 ноября 2017

Немного опоздал на вечеринку, но вот что я использовал в старых версиях rails.

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

Должно быть обратно совместимо в новых версиях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...