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

ren*_*912 20 javascript redirect node.js express

我有一个静态站点,一个简单的单页面布局,我在Dokku中部署.我需要从WWW重定向(301)非www和从*.website1.comwebsite2.com,但我不知道怎么办.我试图在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'))
})
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*ric 34

res.redirect(301, 'http://yourotherdomain.com' + req.path)
Run Code Online (Sandbox Code Playgroud)

请参阅Express文档.


Max*_*rty 12

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

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

   response.set('location', 'https://my.redirect.location');
   response.status(301).send()
Run Code Online (Sandbox Code Playgroud)


mar*_*are 0

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