построить URL без поддоменов в рельсах 3 - PullRequest
4 голосов
/ 14 апреля 2011

В настоящее время я определяю, есть ли у пользователя определенный поддомен, и перенаправляю пользователя на URL без субдомена как таковой:

subdom = request.subdomains.first
if subdom == "redirectme"
  redirect_to(request.protocol + request.domain + ":" + request.port.to_s)
end

Как видите, я реконструирую домен вручную, чтобы не включать поддомен для замены чего-то вроде: http://redirectme.example.com:3000 чтобы: http://example.com:3000

Однако я должен помнить, что иногда не будет порта (и поэтому двоеточие после домена является избыточным), и я подозреваю, что есть другие вещи, которые я не учел. Как лучше получить полный домен без субдоменового компонента?

Спасибо!

Ответы [ 3 ]

14 голосов
/ 24 октября 2012

Как насчет root_url( :subdomain => false )?

13 голосов
/ 14 апреля 2011

На самом деле я не знаю, есть ли лучшие способы.Что касается компонентов, вы в значительной степени получили это: протокол, домен и порт.

Если вы хотите, чтобы двоеточие ушло, вы можете сделать это так:

redirect_to(request.protocol + request.domain + (request.port.nil? ? '' : ":#{request.port}"))

Просто проверьте, что это нольвыполняет магию!

0 голосов
/ 14 апреля 2011
redirect_to URI.parse(request.uri).tap { |uri| uri.host = request.domain }.to_s

Он позаботится о том, чтобы порт явно присутствовал или не присутствовал в URI.

Примеры:

URI.parse("http://www.example.com/").to_s #"http://www.example.com/"
URI.parse("http://www.example.com:80/").to_s #"http://www.example.com/"
URI.parse("https://www.example.com:443/").to_s #"https://www.example.com/"
URI.parse("http://www.example.com:3000/").to_s #"http://www.example.com:3000/"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...