Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails将_重定向到相对URL_Ruby On Rails_Ruby_Apache_Http - Fatal编程技术网

Ruby on rails RubyonRails将_重定向到相对URL

Ruby on rails RubyonRails将_重定向到相对URL,ruby-on-rails,ruby,apache,http,Ruby On Rails,Ruby,Apache,Http,我有一个Rails 4应用程序托管在Cloudflare后面,启用了灵活的SSL选项,但Cloudflare和负载平衡器后面的应用程序服务器之间没有SSL 所以发生的情况是,例如,当用户使用HTTPS注册时,我重定向到欢迎页面 redirect_to :action => :welcome 。。。或者 redirect_to "/users/welcome" 。。。Rails抛出一个HTTP头“Location:”。这显然会中断会话并关闭SSL 我尝试过config.force_ssl

我有一个Rails 4应用程序托管在Cloudflare后面,启用了灵活的SSL选项,但Cloudflare和负载平衡器后面的应用程序服务器之间没有SSL

所以发生的情况是,例如,当用户使用HTTPS注册时,我重定向到欢迎页面

redirect_to :action => :welcome
。。。或者

redirect_to "/users/welcome"
。。。Rails抛出一个HTTP头“Location:”。这显然会中断会话并关闭SSL

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

我无法将应用程序切换到SSL,因为它的某些部分必须使用HTTP,而且在网络上没有什么敏感的东西可以证明切换是合理的,而且我有一个或60个不同的网站建立在这个应用程序上,为所有这些应用程序购买证书将花费一大笔钱。我只想要Cloudflare的SSL,因为用户认为“小绿锁”意味着该站点安全可靠:)

那么,有没有一种方法可以使用相对URL使Rails重定向?与添加。。。在它重定向到的每个URL前面


TIA

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

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


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

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


仅供参考,您可以从lets Encrypt获得免费证书,但为所有站点设置证书所需的工作量将非常大,而且这将使设置新站点变得复杂(现在是点击过程)…太复杂了。
Header edit Location "(^http[s]?://)([a-zA-Z0-9\.\-]+)" ""
redirect_to :action => :welcome, :protocol => '//'
redirect_to :action => :welcome, :only_path => true