我在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
答案 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\.\-]+)" ""