Ответ 1
res.redirect(301, 'http://yourotherdomain.com' + req.path)
У меня есть статический сайт, простой макет страницы, который я развертываю в 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'))
})
Это версия, которая работает, но без перенаправления.
res.redirect(301, 'http://yourotherdomain.com' + req.path)
Для всех, кто прибывает сюда из Google, а @frederic ответ по-прежнему является тем, что рекомендуется экспресс-документами, стиль response.send(status, body)
устарел и будет генерировать предупреждение (я нахожусь в экспресс-версии 4.13.4 на момент написания), и, что более важно, я обнаружил, что при перенаправлении он больше не дает желаемого результата.
Как упоминалось в @Markasoftware, чтобы добиться автоматического следования 301, вам нужно установить заголовок местоположения на нужный URL. Тело запроса может быть пустым:
response.set('location', 'https://my.redirect.location');
response.status(301).send()
Насколько я понимаю, чтобы установить код HTTP 301, вы должны установить код ответа 301
, а затем установить заголовок Location
на любой URL-адрес, к которому вы хотите перенаправить. Я не думаю, что это предпочтительный способ делать www для URL-адресов, отличных от www, хотя