如何在Node.js / Express中redirect(301)?

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

我的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')) }) 

这是有用的版本,但没有redirect。

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

请参阅快速文档 。

对于从Google到达这里的任何人,@ frederic的回答仍然是express文档推荐的, response.send(status, body)风格已经被弃用,并会产生一个警告(我在4.13.4写作),更重要的是我发现它不再在redirect时产生期望的结果。

正如@Markasoftware所提到的,要实现一个自动跟随301,你需要设置位置标题到你想要的url。 请求主体可以是空的:

  response.set('location' 'https://my.redirect.location'); response.status(301).send() 

据我所知,要设置一个HTTP 301代码,您可以将响应代码设置为301 ,然后将Location标头设置为您希望redirect到的任何url。 虽然我不认为这是做非wwwurl的首选方式