我们已为https://www.domainname.com的域购买了Verisign SSL;问题是它不适用于https://domainname.com。我正在使用ssl_requirement Gem:https://github.com/rails/ssl_requirement
所以我修补了Gem以将非www的重定向到https://www.domainname.com,并且它适用于以下场景:
http://www.domainname.com => https://www.domainname.com http://domainname.com => https://www.domainname.com
但不适用于有人输入的情况:
似乎服务器在Rails获得控制权之前抛出错误。以下是服务器的详细信息:
操作系统:RHEL 5.5 Ruby:1.9.2 Rails:3.0.10(在RVM上) Web服务器:带乘客的Apache
感谢您的帮助。
答案 0 :(得分:2)
以下是我用来从domainname.com重定向到www.domainname.com的代码
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domainname.com [nc]
RewriteRule (.*) http://www.domainname.com/$1 [R=301,nc]
这是在www目录的根级别的.htaccess文件中。
这是关于Rails 3.1中SSL的另一篇文章: http://www.simonecarletti.com/blog/2011/05/configuring-rails-3-https-ssl/
答案 1 :(得分:1)
您将不得不使用rails应用程序的公共目录中的.htaccess文件在apache级别处理此问题。
对于www重写规则,请参阅此SO答案:use htaccess to add www with https support
此外,如果你要ssl你的整个应用程序看看Rack :: SSL中间件 - 它处理安全的cookie等。这篇文章对使用它有很好的记录,也避免了混合内容警告。
http://collectiveidea.com/blog/archives/2010/11/29/ssl-with-rails/
希望这有帮助。
注意:开始思考,这可能无法正常工作,如果不是这样,您可能需要设置特定的VirtualHost来处理该情况,希望不会。
答案 2 :(得分:1)
我发现rack-rewrite gem在这里特别有用,特别是因为Heroku不使用.htaccess。宝石:https://github.com/jtrupiano/rack-rewrite
这是config / environments / production.rb
中的示例配置ExampleApp::Application.configure do
config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do
r301 /.*/, Proc.new {|path, rack_env| "http://www.#{rack_env['SERVER_NAME']}#{path}" }, :if => Proc.new {|rack_env| rack_env['SERVER_NAME'] !~ /www\./i}
end
#... the rest of production environment config.
end
请查看我的要点:https://gist.github.com/1843097