如何在Node.js / Express中进行重定向(301)?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Node.js / Express中进行重定向(301)?相关的知识,希望对你有一定的参考价值。

我有一个静态站点,一个简单的单页面布局,我在Dokku中部署。我需要从www到非www以及从*.website1.comwebsite2.com进行重定向(301),但我不知道如何。我试图在npm中使用express-force-domain但是它让我的URL变得疯狂并且有一些重定向循环,我正在尝试其他方法,我在网上找到但没有成功。

我的server.js是:

var express = require('express')
var app = express();

app.set('port', (process.env.PORT || 80))
app.use(express.static(__dirname + '/public'))

app.get('/', function(request, response) {
  response.send('Hello World!')
})

app.listen(app.get('port'), function() {
  console.log("Node app is running at localhost:" + app.get('port'))
})

这是有效的版本,但没有重定向。

答案
res.redirect(301, 'http://yourotherdomain.com' + req.path)

Express documentation

另一答案

对于从谷歌到达这里的人来说,虽然@ frederic的答案仍然是快递文档所推荐的,但是response.send(status, body)风格已经被弃用并且会产生警告(我在写作时的快递4.13.4),更重要的是我发现它在重定向时不再产生所需的结果。

正如@Markasoftware所提到的,要实现自动跟随301,您需要将位置标头设置为您想要的URL。请求正文可以为空:

   response.set('location', 'https://my.redirect.location');
   response.status(301).send()
另一答案

据我所知,要设置HTTP 301代码,您可以将响应代码设置为301,然后将Location标头设置为您希望其重定向到的任何URL。我不认为这是非www网址的首选方式

以上是关于如何在Node.js / Express中进行重定向(301)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Node.js、Express 和 Mongoose 进行身份验证?

node.js 和 express:如何等待 udp 响应

如何在 node.js express 中的路由 end() 之后停止中间件序列继续进行

使用 Node.js、Handlebars 和 Express 进行模板继承

如何使用 Express JS/Railway JS (Node.JS) 生成 JSON

如何在 Node.js / Express.js 中将中间件放在它自己的文件中