【问题标题】:How to make a redirect (301) in Node.js / Express?如何在 Node.js / Express 中进行重定向(301)?
【发布时间】:2014-07-31 20:40:46
【问题描述】:

我有一个静态站点,我在 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'))
})

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

【问题讨论】:

  • 响应对象有一个方法redirect(url)。我会从那里开始。
  • 非 www 到 www 的重定向最好通过服务器管理面板等中的重定向来完成,而不是在 Node 中?你将如何用 dokku 做到这一点超出了我的范围,但这里是 Heroku 的 something
  • 我的服务器没有管理面板,是数字海洋上的云服务器

标签: javascript node.js redirect express


【解决方案1】:
res.redirect(301, 'http://yourotherdomain.com' + req.path)

Express documentation

【讨论】:

    【解决方案2】:

    对于从 Google 来到这里的任何人,虽然 @frederic 的答案仍然是 express 文档所推荐的,但 response.send(status, body) 样式已被弃用并将产生警告(我在撰写本文时使用的是 express 4.13.4) ,更重要的是我发现它在重定向时不再产生预期的结果。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 是的,我试过这个但不起作用,我的大问题是将域 1 重定向到域 2,之后是 www 到非 www。所以又出现了一个问题,我的dokku不认识其他网站,它总是打开同一个网站,我不知道为什么
      猜你喜欢
      • 2018-03-09
      • 2010-12-21
      • 2019-06-09
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2018-07-30
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多