我正在构建一个在OpenShift上托管的Node.js应用程序。我正在尝试将所有访问重定向到网站的https版本。
我尝试在公共目录中添加一个.htaccess文件,就像在其他一些帖子中建议的那样,但它没有什么区别。
下面是我的.htaccess文件:
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
我使用AngularJs和ui-router来处理网站上的导航。通过实现下面的代码,我能够实现重定向到https,但我认为这应该在服务器端处理。
if(window.location.protocol != 'https'){
$window.location.href = $location.absUrl().replace('http', 'https');
}
答案 0 :(得分:1)
.HTACCESS可以与基于Apache的磁带一起使用。检查this FAQ answer;它描述了如何使用Express重定向到HTTPS。
修改强>
原始答案解决了OpenShift Online v2的问题,即no longer available。在OpenShift 3上托管应用时,创建insecureEdgeTerminationPolicy
设置为Redirect
的{{3}}将处理平台级别的重定向,而无需在应用程序本身中解决此问题。
使用某些secure route订阅计划(即 Starter 计划时,在编写此编辑时),路由可以是OpenShift Online 3到默认主机和证书。
答案 1 :(得分:0)
如果您在节点应用中使用 express.js ,则可以使用req.secure
检查请求是否来自https
。 (three.js CubeTexture)。
因此,您可以编写可添加到所有路由的中间件,以检查请求是否来自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
。