web-dev-qa-db-fra.com

Comment faire une redirection (301) dans Node.js / Express?

J'ai un site statique, une simple mise en page unique que je déploie dans Dokku. J'ai besoin de faire une redirection (301) de www vers non www et de *.website1.com à website2.com, mais je ne sais pas comment. J'essayais d'utiliser express-force-domain dans npm mais cela rend mon URL folle et ayant des boucles de redirection, j'essayais d'autres méthodes que je trouve sur le web mais aucune ne réussit.

mon server.js est:

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

C'est la version qui fonctionne, mais sans redirection.

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

Voir documentation Express .

34
Frederic

À toute personne arrivant ici de Google, alors que la réponse de @ frederic est toujours celle recommandée par les documents express, le style response.send(status, body) est obsolète et générera un avertissement (je suis sur 4.13.4 express au moment de la rédaction) ), et plus important encore, j'ai constaté qu'il ne produisait plus le résultat souhaité lors de la redirection.

Comme @Markasoftware l'a mentionné, pour obtenir un 301 suivi automatiquement, vous devez définir l'en-tête d'emplacement sur l'URL souhaitée. Le corps de la demande peut être vide:

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

Si je comprends bien, pour définir un code HTTP 301, vous devez définir le code de réponse sur 301, puis définissez l'en-tête Location sur l'URL vers laquelle vous souhaitez qu'il redirige. Je ne pense pas que ce soit le moyen préféré de faire des URL www vers non-www

0
markasoftware