ruby-on-rails – 如何在Rails 4中为某些路径选择性地启用SSL?

如何为给定路径关闭SSL HTTPS?我看到 Enable SSL for certain resource actions,但那是为单个路径启用HTTPS.我的配置有

config.force_ssl = true

但是,当我显示一个包含iframe的页面并嵌入外部源时

<iframe src='http://www.

然后它甚至没有出现(Chrome),因为它是混合内容.所以我想为具有iframe的单一路由禁用SSL. (我真的想根据内容打开和关闭它.)

我尝试将其添加到我的routes.rb中

get 'frame',:constraints => { :protocol => 'http' }

但是这给了一个错误http://127.0.0.1:3000/posts/136/frame

No route matches [GET] "/posts/136/frame"

即使路线出现了

frame_post GET  /posts/:id/frame(.:format)  posts#frame {:protocol=>"http"}

我也看到了Force SSL for specific routes in Rails 3.1并尝试过

gem 'rack-ssl-enforcer' # Gemfile
config.middleware.use Rack::SslEnforcer,:except => [ /\/frame$/ ],:strict => true # application.rb

但它仍然总是重定向到https.我也试过了

force_ssl :except => :frame # posts_controller.rb

但这也不起作用.

我正在使用Rails 4.1.

解决方法

Rack ssl enforcer是一个很好的解决方案 – 你的正则表达式是错误的.在您的表单中,正则表达式只会排除完全为“/ frame”的路径,并且不会排除在/ frame之前有任何内容的路径

如果要排除以/ frame结尾的任何路径,正确的正则表达式将是:

\.*\/frame$/

导致配置:

config.middleware.use Rack::SslEnforcer,:except => [ \.*\/frame$/ ],:strict => true

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...