Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Openshift重定向到节点上的https_Node.js_Ssl_Express_Openshift - Fatal编程技术网

Node.js Openshift重定向到节点上的https

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

我正在构建一个托管在OpenShift上的Node.js应用程序。我正在尝试将所有访问重定向到该网站的https版本

我试着在公共目录中添加一个.htaccess文件,正如在其他一些帖子中建议的那样,但这没有什么区别

下面是我的.htaccess文件:

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);