Rails 3 SSL路由从https重定向到http

此问题与此SO问答(rails-3-ssl-deprecation)相关
)建议在rails 3中使用routes.rb和如下路由处理ssl:

资源:会话:约束=>{:协议=>“https”}
#将/foos和以/foos/开头的任何内容重定向到https。
匹配“foos(/*path)”,:to=>用_port+request.fullpath}重定向{| | |,request |“https://”+request.host_

我的问题是链接使用相对路径(我认为这是正确的术语),一旦我在https页面上,所有其他指向站点上其他页面的链接都使用https。

1) 对于不需要https的页面,返回http的最佳方式是什么?我是否必须为所有这些设置重定向(我希望注意),或者是否有更好的方法。重定向是否如下所示:

匹配“foos(/*path)”,:to=>用_port+request.fullpath}重定向{| |,request |“http://”+request.host_

2) 如果需要重定向回http,我如何处理希望所有方法都是http(只有一个除外)的情况?ie foos(/*路径)将用于所有foos方法。但是我想让foos/upload\u foos使用ssl。我知道怎么要求

范围:约束=>{:protocol=>“https”}do
匹配“上传”=>'foos#upload_foos',:via=>:post,:as=>:上传
终止

但是,如果我将http重定向放在foos路径中,https上传\u foos会发生什么情况

如果希望所有链接都能够在http和https之间切换,则必须停止使用\u路径帮助程序,并切换到\u url帮助程序

之后,使用带有协议参数forced和协议约束的作用域会使URL自动切换

routes.rb
范围:协议=>’https://’,:约束=>{:protocol=>’https://’}do
资源:会议
终止
资源:小发明

现在在你看来:

<%=会话_url#=>https://..../sessions %&燃气轮机;
<%=gizmos_url#=>http://..../gizmos %&燃气轮机;

编辑

这不会修复当您使用https时返回http的URL。要修复此问题,您需要覆盖的url\u

在任何助手中

模块应用程序助手
def url_用于(选项=nil)
如果哈希===选项
选项[:协议]| |='http'
终止
超级(选项)
终止
终止

这将把协议设置为“http”,除非它是显式设置的(在路由中或调用帮助程序时)

发表评论