2017-02-10 11 views
1

すべてのHTTP要求をhttpsサーバにリダイレクトしようとしています。 This works fine、httpsサーバのポートが443の場合です。しかし、別のポートにリダイレクトしようとすると、それは起こりません。ここに私のコードは次のとおりです。HTTPを別のポートのHTTPSにリダイレクトする

http.createServer(function(req,res){ 
    var host = req.headers['host'], 
     url = req.url; 
     res.writeHead(301, 
      {"Location": "https://" + host + ":"+SERVER.SPORT + url}) 
     res.end() 
}).listen(SERVER.PORT) 

https.createServer(SERVER.HTTPS_OPTIONS,app).listen(SERVER.SPORT) 

答えて

2

あなたhostは、最も可能性の高い、すでにポート番号が含まれています。

あなたは、この変更した場合を確認することができますに

var host = req.headers['host'] 

を:あなたがしているものをURL参照してください

console.log("https://" + host + ":"+SERVER.SPORT + url); 

var host = req.headers['host'].split(':')[0]; 

また、いくつかのログを追加建物はのように見える。

urlモジュールを使用して、手動で文字列を連結するのではなくURLを使用して、そのような誤りを避けることもできます。参照:

は、あなたが構築しているURLがどのように見えるかを知るために、いくつかのログを追加します。また、カールでテストしてください:

curl -v http://localhost:1234 

返されるヘッダーを確認してください。

+0

私はそれをログに記録し、気付かなかった。私は本当にあなたの答えの後で、彼らは[api](https://nodejs.org/api/url.html#url_url_strings_and_url_objects)のURLの素敵な表現を持っていると思った! しかし、私が明示的に 'example.com:80'を要求した場合、他の回答にあるメソッド(と私が使ったもの)も失敗します。これは、これが隠されたデフォルトポートのためにのみ機能することを意味しますか? –

関連する問題