2012年10月10日

【Node.js】expressで301 Redirect


湘南社中のアプリ紹介ページはnon-wwwで運営しているのですが、
wwwで間違ってアクセスしてきた人をリダイレクトする為の設定を紹介します。


まず、proxyですが、wwwもnon-wwwも同じポートで受けます。
node-proxyの例です。

var http = require('http-proxy');
var options = {
    router : {
        'shonanshachu.com'          : 'localhost:10001',
        'www.shonanshachu.com'      : 'localhost:10001',
    }
}
var proxy = http.createServer(options);
proxy.listen(80);

次に、shonanshachu.comのapp.jsを改変します。

app.use(express.methodOverride());
// forwarding www to non www url
app.use(function(req,res,next){
  if(req.headers.host === 'www.shonanshachu.com') {
    res.writeHead(301, {'Location':'http://shonanshachu.com'+req.url, 'Expires': (new Date).toGMTString()});
    res.end();
  } else {
    next();
  }
});
app.use(app.router);

これで、301リダイレクトの完成です。
www付きの場合は、non-wwwへリダイレクトが掛かります。