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

43

我有一个静态网站,是一个简单的单页面布局,我在Dokku上部署它。我需要将www重定向(301)到非www,将*.website1.com重定向到website2.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'))
})

那是能正常工作的版本,但没有重定向。


响应对象有一个方法redirect(url)。我会从那里开始。 - Edwin Dalorzo
1
非www到www的重定向最好在服务器管理面板等中进行重定向,而不是在Node中进行。我不知道如何在dokku中实现这一点,但这里有Heroku的一些内容 - adeneo
1
我的服务器没有管理员面板,它是在Digital Ocean上的云服务器。 - renatomattos2912
3个回答

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

请查看Express文档


28

对于从谷歌搜索跳转至此处的人,虽然 @frederic 的回答仍然是 express 文档推荐的,但自 Express 4.13.4 版本起 response.send(status, body) 已被弃用并会生成警告,而且更重要的是,我发现在重定向时它已不再产生预期的结果。

正如 @Markasoftware 提到的,为了实现自动跟随的 301 重定向,你需要将 location 头设置为所需的 URL,请求体可以为空:

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

0
据我理解,要设置HTTP 301代码,您需要设置响应代码为301,然后将Location头设置为您想要重定向到的任何URL。不过,我认为这不是将www转换为非www url的首选方法。

是的,我尝试过这个方法,但没有成功。我的主要问题是将domain1重定向到domain2,www转换为非www是在此之后发生的。因此,另一个问题出现了,我的dokku无法识别其他站点,它总是打开相同的站点,我不知道为什么。 - renatomattos2912

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接