Ruby on Rails redirect_to相对URL

时间:2016-01-28 09:31:24

标签: ruby-on-rails ruby apache http

我在Cloudflare后面托管了一个Rails 4应用程序,灵活SSL选项已打开,但Cloudflare与位于负载均衡器后面的应用服务器之间没有SSL。

所以会发生什么,例如当用户使用HTTPS注册并重定向到欢迎页面时...

redirect_to :action => :welcome

......或....

redirect_to "/users/welcome"

... Rails抛出HTTP标头“Location:http://www.example.com/users/welcome”。这显然会破坏会话并关闭SSL。

我尝试了config.force_ssl,但浏览器进入无限重定向循环。

我无法将应用程序切换到SSL,因为它的某些部分必须使用HTTP,并且没有任何敏感的线路来证明切换是合理的,而且我还有60个不同的网站建立在这个应用程序上,购买所有的证书他们会花一大笔钱。我只想要Cloudflare的SSL,因为用户认为“小绿锁”意味着网站安全可靠:)

那么,有没有办法使用相对URL进行Rails重定向?而不是在每个网址前面添加http://www.example.com ...,它会重定向到?

TIA

2 个答案:

答案 0 :(得分:2)

对于不使用Apache的解决方案,您可以将代码编写为:

redirect_to :action => :welcome, :protocol => '//'

,或者

redirect_to :action => :welcome, :only_path => true

答案 1 :(得分:0)

我在使用Apache时发现了一个简单的解决方法:重写30X标头

http://blog.delouw.ch/2009/10/29/302-redirect-behind-ssl-terminating-proxies/

Header edit Location ^http://(.*)$ https://$1

这个问题还有一个关于编辑标题以删除协议和主机的答案,而不是重定向所有内容:

How to Rewrite Location Response Header in a Proxy Setup with Apache

Header edit Location "(^http[s]?://)([a-zA-Z0-9\.\-]+)" ""