0

我正在尝试在 Sinatra 中使用此将所有 https 流量重定向到 http

  get "*" do
      if request.secure?
        redirect request.url.gsub(/^https/, "http")
      else
        pass # continue execution
      end   
    end

但是,在 heroku 上的自定义域上,我的浏览器向我显示错误:

This is probably not the site you are looking for!

You attempted to reach www.[domain].com, but instead you actually reached a server identifying itself as *.heroku.com. 

我的 DNS 配置了 www 子域,其CNAME指向[domain].herokuapp.comhttps://devcenter.heroku.com/articles/custom-domains

这是DNS问题吗?购买 SSL 证书是允许所有 https 流量在 heroku 上重定向到 http 的唯一方法吗?

4

1 回答 1

0

如果您要使用该代码,那么我会将其设置为before过滤器,因为它确实是这样。

但是,如果您在应用程序层(即您的 Sinatra 应用程序在 Heroku 上的位置)收到了请求,那么您需要一个证书,因为 HTTP 层(处理此位置的 Nginx 代理服务器)已经收到了请求并将尝试将其作为安全连接处理,但由于没有证书而失败/引发错误。如果您尝试通过httpsURI 方案访问非 SSL 页面/站点,这就是您将收到的消息。您仍然可以访问该网站,但用户必须点击一个可怕的警告。

我知道的唯一方法可能在没有证书的情况下工作(但看这个答案可能不是)是如果您可以访问 Nginx 配置并在那里重写 URL(可能还有一些标头)。

于 2013-07-10T17:32:14.807 回答