Как сделать перенаправление (301) в Node.js/Express?

У меня есть статический сайт, простой макет страницы, который я развертываю в Dokku. Мне нужно сделать перенаправление (301) с www на non www и от *.website1.com до website2.com, но я не знаю, как это сделать. Я пытался использовать express-force-domain в npm, но это делает мой URL сумасшедшим и имеет некоторые циклы redirect, я пытался использовать другие методы, которые я нашел в Интернете, но никому не удается.

my 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'))
})

Это версия, которая работает, но без перенаправления.

Ответ 2

Для всех, кто прибывает сюда из Google, а @frederic ответ по-прежнему является тем, что рекомендуется экспресс-документами, стиль response.send(status, body) устарел и будет генерировать предупреждение (я нахожусь в экспресс-версии 4.13.4 на момент написания), и, что более важно, я обнаружил, что при перенаправлении он больше не дает желаемого результата.

Как упоминалось в @Markasoftware, чтобы добиться автоматического следования 301, вам нужно установить заголовок местоположения на нужный URL. Тело запроса может быть пустым:

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

Ответ 3

Насколько я понимаю, чтобы установить код HTTP 301, вы должны установить код ответа 301, а затем установить заголовок Location на любой URL-адрес, к которому вы хотите перенаправить. Я не думаю, что это предпочтительный способ делать www для URL-адресов, отличных от www, хотя