Openshiftredirect到节点上的https

我正在构buildOpenShift上托pipe的Node.js应用程序。 我正在尝试将所有访问redirect到该网站的https版本。

我试图在公共目录中添加一个.htaccess文件,就像在其他一些post中提到的那样,但是它没有什么区别。

下面是我的.htaccess文件:

RewriteEngine on RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

我使用AngularJs和ui-router来处理网站上的导航。 通过执行下面的代码,我能够实现redirect到https,但我认为这应该在服务器端处理。

 if(window.location.protocol != 'https'){ $window.location.href = $location.absUrl().replace('http', 'https'); } 

.HTACCESS可以与基于Apache的磁带盒一起使用。 检查这个常见问题解答 它描述了如何使用Expressredirect到HTTPS。

如果您在节点应用程序中使用express.js ,则可以使用req.secure检查请求是否通过https 。 ( 参考 )。

所以你可以编写中间件,你可以添加到所有的路由,将检查是否通过https请求,并通过http重新路由。

例如:

https-redirect.js文件:

 exports.httpsRedirect = function (req, res, next) { if (req.secure) { next(); } else { res.redirect('https://' + req.headers.host + req.path); } }; 

app.js文件(或任何你用来定义路线):

 var express = require('express'); var app = express(); var https = require('./https-redirect'); app.all('*', https.httpsRedirect); 

现在,您的所有路由将首先运行https.httpsRedirect中间件,并根据需要重新路由到https