gpt4 book ai didi

ruby-on-rails - 在 force_ssl 之前重定向到 'www'

转载 作者:太空宇宙 更新时间:2023-11-03 12:48:17 25 4
gpt4 key购买 nike

我正在将一个应用程序迁移到 heroku,但在 ssl 和重定向方面遇到了一些问题。

我在 Rails 3.1 上,我尝试在环境 production.rb 中使用中间件强制使用 ssl。我都试过将它添加到应用程序 Controller 中。

问题是,当我执行 ssl 的完整站点强制时,我无法在它达到 SSL 要求之前重定向到 www。这很重要,因为如果用户访问 https://mydomain.com,他们将看到错误的 SSL 证书警告。 .如果他们继续,他们将被重定向到“www”。

SSL 强制正在运行,重定向到“www”子域正在运行,我只需要先进行重定向。

有什么想法吗?

Per Nathan 的评论:

我有一个不完美的解决方案。我的 root_path 没有强制使用 ssl。所有具有敏感信息的部分都在强制执行它。到达后,所有流量都定向到我的 routes.rb 中的 www:

constraints(:host => "domain.com") do
match "(*x)" => redirect { |params, request|
URI.parse(request.url).tap { |x| x.host = "www.domain.com" }.to_s
}
end

这可能会隐藏大部分问题,因为当用户点击登录或其他任何内容时,他们现在位于 www 域。浏览器不会发出有关证书的警告。这对于这个特定项目来说效果很好。另一个项目,我最终花了大笔钱购买了一张已签名的通配符证书。

抱歉,这不是真正的解决方案。如果你去 https://domain.com/forcedsslpath该项目仍然给出安全警告。

最佳答案

由于您的 301 是由应用程序发送的,并且请求在到达中间件之前甚至无法到达应用程序(在其上运行 rack-ssl),因此您唯一的解决方案是更改中间件或在之前进行重定向它甚至会攻击中间件。

对于后者,您必须四处寻找 Heroku。我自己不使用它。在 VPS 部署中,您只需在前向 Web 服务器(Apache、nginx)上添加重定向,然后再访问中间件。这似乎是一个常见的情况,所以我想 Heroku 可能会为您提供一些东西。

对于前者,应该不难。 rack-ssl 中间件非常非常简单,根据您的需要对其进行猴子修补应该不难。

https://github.com/josh/rack-ssl/blob/master/lib/rack/ssl.rb#L58

我想像 url.host = "www.myhost.com" 这样的东西可能是你想要的(尽管你可能会说可能有更多与 FQDN 无关的方法来做到这一点).

关于ruby-on-rails - 在 force_ssl 之前重定向到 'www',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7506954/

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