web-dev-qa-db-ja.com

Node.js / Expressでリダイレクト(301)を作成する方法は?

静的なサイト、Dokkuにデプロイするシンプルな単一ページレイアウトがあります。 wwwからwww以外へ、および*.website1.comからwebsite2.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'))
})

それが機能するバージョンですが、リダイレクトはありません。

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

Express documentation を参照してください。

34
Frederic

Googleからここに到着した人には、@ fredericの答えはまだエクスプレスドキュメントで推奨されていますが、response.send(status, body)スタイルは非推奨になり、警告が生成されます(執筆時点でExpress 4.13.4 )、さらに重要なことに、リダイレクト時に望ましい結果が得られないことがわかりました。

@Markasoftwareが述べたように、自動的に追跡される301を実現するには、ロケーションヘッダーを目的のURLに設定する必要があります。リクエストの本文は空にすることができます:

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

私が理解している限り、HTTP 301コードを設定するには、応答コードを301に設定し、Locationヘッダーをリダイレクト先のURLに設定します。しかし、これはwww以外のURLへのwwwを行うための好ましい方法ではないと思います

0
markasoftware