机架重写代码将https重定向到http(在heroku上)

时间:2012-06-11 16:35:45

标签: ruby-on-rails heroku rack rack-rewrite

谷歌以某种方式将我的主页编入索引https://mydomain.com。当您进行网站:mydomain.com搜索时,第一个结果是https://mydomain.com,我没有SSL证书,也不想做https。现在,我们的访问者在他们的浏览器中收到了丑陋的警告(因为heroku默认提供他们的* .heroku证书)。

似乎我可以使用rack-rewrite gem进行301重定向,但我无法找到原因。

那么,什么是机架重写配方将所有https://重定向到http://?我所能找到的只是关于如何做反向事件或进行规范重定向的信息。

3 个答案:

答案 0 :(得分:1)

嗯,没有经过测试,但是会有类似的工作吗?

r301 %r{.*}, 'http://non-secure-domain.com$&', :if => Proc.new {|rack_env|
  rack_env['SERVER_PORT'] != '80'
}

答案 1 :(得分:0)

rack-rewrite的文档在https://github.com/jtrupiano/rack-rewrite#scheme

中提到了一个很好的方法
# Redirect all https traffic to http
r301 %r{.*}, 'http://www.example.tld$&', :scheme => 'https'

答案 2 :(得分:0)

使用rack-rewrite中的scheme选项只会导致heroku无限循环。由于heroku将代理您的工作人员的方式,您也无法在端口为80。由于这种方式以及路由层的工作方式,您必须检查HTTP_X_FORWARDED_PROTO标题:

r301 %r{.*}, 'http://example.com$&', :if => Proc.new { |rack_env|
  rack_env['HTTP_X_FORWARDED_PROTO'] == 'https'
}