此问题与此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”,除非它是显式设置的(在路由中或调用帮助程序时)