Node.js Openshift重定向到节点上的https
我正在构建一个托管在OpenShift上的Node.js应用程序。我正在尝试将所有访问重定向到该网站的https版本 我试着在公共目录中添加一个.htaccess文件,正如在其他一些帖子中建议的那样,但这没有什么区别 下面是我的.htaccess文件:Node.js Openshift重定向到节点上的https,node.js,ssl,express,openshift,Node.js,Ssl,Express,Openshift,我正在构建一个托管在OpenShift上的Node.js应用程序。我正在尝试将所有访问重定向到该网站的https版本 我试着在公共目录中添加一个.htaccess文件,正如在其他一些帖子中建议的那样,但这没有什么区别 下面是我的.htaccess文件: RewriteEngine on RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 我使用A
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
我使用AngularJs和ui路由器处理网站导航。通过实现下面的代码,我能够实现重定向到https,但我认为这应该在服务器端处理
if(window.location.protocol != 'https'){
$window.location.href = $location.absUrl().replace('http', 'https');
}
.HTACCESS可以与基于Apache的盒带一起使用。检查;它描述了如何使用Express重定向到HTTPS
编辑:
最初的答案解决了OpenShift Online v2的问题,即。当在OpenShift 3上托管应用程序时,创建一个unsecuredGeterminationPolicy
设置为Redirect
的应用程序将在平台级别处理重定向,而无需在应用程序本身中解决此问题
当使用某些订阅计划(在编写此编辑时,这将是启动计划)时,路由可以是默认主机和证书。如果在节点应用程序中使用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文件(或用于定义路线的任何文件):
现在,您的所有路由都将首先运行
https.httpsredict
中间件,并在必要时重新路由到https
。谢谢,这正是我所需要的。链接已经死了,未来希望解决此问题的人很难过。
var express = require('express');
var app = express();
var https = require('./https-redirect');
app.all('*', https.httpsRedirect);