我希望 Openshift Online 上的 Rails 4.0 应用程序仅通过 https 提供内容。 有一个guide它告诉我们在 web 根目录中使用 .htaccess:
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
我按照指南将带有该指令的 .htaccess 文件放入 openshift 卡带上的 app-root/repo 目录中,但没有任何反应。该指南讨论了网络根目录。 Rails 应用程序的 Web 根目录是什么,或者 openshift 上的 Web 根目录是什么?还有另一种方法可以在 openshift 上为 Rails 建立 http 到 https 重定向吗?
最佳答案
我的情况与您类似(但想要根据 Accept-Language
http header 进行重定向),并且找不到将 .htaccess 放在 OpenShift ruby 盒上的位置。
暂定为.htaccess
我尝试将 .htaccess 文件放入 app-root/repo
, app-root/runtime
, app-root/data
,~/ruby/
目录没有成功..
所以我最终从 Rails 应用程序进行了重定向
通过 Rails 为您的案例提供解决方案
如果您想对所有应用程序强制执行 SSL,您只需设置 config.force_ssl = true
在你的config/application.rb
文件。另一个常见的用例是仅为您的生产环境强制执行 SSL,因此不要将此配置放在常规 application.rb
中。文件,你可以在你的config/environments/production.rb
中设置它.
如果您只需要对特定 Controller 强制执行 SSL,您也可以在 Controller 顶部调用force_ssl 方法,如下所示:
class MyController < ApplicationController
force_ssl
[...your actions..]
end
我通过 Rails 遇到的问题和解决方案
我想添加这个.htaccess
RewriteEngine On
RewriteCond %{HTTP:Accept-Language} ^pt [NC]
RewriteRule ^/$ /pt/ [L,R=301]
RewriteCond %{HTTP:Accept-Language} ^fr [NC]
RewriteRule ^/$ /fr/ [L,R=301]
RewriteRule ^/$ /en/ [L,R=301]
最后不得不在config/routes.rb
中做到这一点Rails 的配置文件
get '/', to: redirect { |path_params, req|
"/#{req.env['HTTP_ACCEPT_LANGUAGE'].scan(/^(?:pt|fr)/).first || 'en'}" }
OpenShift 团队提供的任何帮助来解释在哪里放置 .htaccess
Ruby 墨盒仍然很受欢迎!
关于ruby-on-rails - OpenShift Rails 应用程序上的 http 到 https 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906010/