2011-04-14 66 views
4

我目前檢測用戶是否具有一定的子域,將用戶重定向到URL沒有子域,例如:構造URL,而不在軌子域3

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

不過,我必須記住,有時不會有域後一個端口(因此結腸是多餘的),我懷疑我還沒有考慮其他事情。 沒有子域組件的情況下獲取完整域的更好方法是什麼?

謝謝!

回答

12

其實我不知道有沒有更好的方法。至於組件,你幾乎可以得到它:協議,域和端口。

如果你想結腸走了,你可以這樣做:

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

只是一個零檢查執行的法寶!

0
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/" 
13

如何root_url(:subdomain => false)

+0

由於某些原因,這不適用於Rails 4 – Trip 2015-11-18 18:47:11

+0

@Trip可以在Rails 4.2.0上正常工作。它可能只是一個devo問題:https://github.com/rails/rails/issues/12438? – 2017-03-04 19:26:25