我目前正在检测用户是否有某个子域名,并将用户重定向到没有子域名的网址:
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
但是,我必须记住,有时候不会有一个端口(因此域后面的冒号是冗余的),我怀疑还有其他一些我没有考虑的事情。 在没有子域组件的情况下获取完整域的更好方法是什么?
谢谢!
答案 0 :(得分:14)
root_url( :subdomain => false )
怎么样?
答案 1 :(得分:13)
其实我不知道是否有更好的方法。至于组件,你几乎得到它:协议,域和端口。
如果你想让结肠消失,你可以这样做:
redirect_to(request.protocol + request.domain + (request.port.nil? ? '' : ":#{request.port}"))
只是执行魔法的零检查!
答案 2 :(得分: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/"