gpt4 book ai didi

ruby-on-rails - Rails 3 SSL 路由从 https 重定向到 http

转载 作者:行者123 更新时间:2023-12-03 07:05:26 25 4
gpt4 key购买 nike

这个问题与此相关SO question and answer (rails-3-ssl-deprecation)建议使用routes.rb 和类似的路由来处理rails 3 中的ssl:

resources :sessions, :constraints => { :protocol => "https" }

# Redirect /foos and anything starting with /foos/ to https.
match "foos(/*path)", :to => redirect { |_, request| "https://" + request.host_with_port + request.fullpath }

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

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

match "foos(/*path)", :to => redirect { |_, request|  "http://" + request.host_with_port + request.fullpath }

2) 如果需要重定向回 http,我如何处理我希望除一个方法之外的所有方法都是 http 的情况?即 foos(/*path) 适用于所有 foos 方法。但是假设我希望 foos/upload_foos 使用 ssl。我知道如何要求它

scope :constraints => { :protocol => "https" } do
match 'upload_foos' => 'foos#upload_foos', :via => :post, :as => :upload_foos
end

但是如果我将 http 重定向到 foos 路径,https upload_foos 会发生什么?

最佳答案

如果您希望所有链接都能够在 http 和 https 之间切换,则必须停止使用 _path 帮助程序并切换到 _url 帮助程序。

之后,使用带有强制协议(protocol)参数和协议(protocol)约束的范围可以使 URL 自动切换。

路线.rb
scope :protocol => 'https://', :constraints => { :protocol => 'https://' } do
resources :sessions
end

resources :gizmos

现在您的观点是:

<%= sessions_url # => https://..../sessions %>
<%= gizmos_url # => http://..../gizmos %>
<小时/>

编辑

这并不能修复当您使用 https 时返回到 http 的 url。要解决此问题,您需要覆盖 url_for

在任何助手中
module ApplicationHelper
def url_for(options = nil)
if Hash === options
options[:protocol] ||= 'http'
end
super(options)
end
end

这会将协议(protocol)设置为“http”,除非明确设置(在路由中或调用帮助程序时)。

关于ruby-on-rails - Rails 3 SSL 路由从 https 重定向到 http,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3993651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com