//Force HTTPS
if (app.get('env') == 'production'){
app.use('*',function(req,res,next){
if(req.headers['x-forwarded-proto']!='https') res.redirect(301, "https://" + req.host + req.url)
/* x-forwarded-proto is used because heroku */
else next()
})
}
对于使用此示例的任何人 修改:,我们已弃用req.host
,请务必使用req.hostname
。
我有一个代码块,可以将任何http请求重定向到同一页面,但使用https协议..除了使http请求始终重定向到主页外,它的工作方式非常好。我已将其追溯到req.url
总是等于'/'
这一事实,无论请求网址实际上是什么。
即。如果我导航到页面http://hostname.com/my/path
,我希望服务器上的req.url
等于"my/path/"
,而是等于"/"
。
我认为这与我用于前端的react-router或者heroku内部重定向请求的方式有关,但是我无法找到解决方案。
答案 0 :(得分:0)
app.use
是表达还是什么?我的猜测是,在你获得你提供的代码片段之前,你可能正在执行重定向。它可能不是react-router,因为前端的东西发生在后端返回响应之后(意味着req.url不应该受到react-router的影响,因为react-router会在以后出现)
答案 1 :(得分:0)
将函数挂载到app.use()
的路径,通过从中删除挂载点部分来重写req.url
。您应该使用req.originalUrl
代替或省略路径参数:
app.use(function (req, res, next) {
// req.url not changed as path is not specified
});
app.use('/foobar', function (req, res, next) {
// foobar removed from the req.url
});
app.use('*', function (req, res, next) {
// everything (*) removed from the req.url
// original URL available in req.originalUrl
});