4

これを行うための最良の方法は何ですか?

www.mysite.comすべてのリクエストをからにリダイレクトしたいmysite.com

*.mysite.com理想的mysite.comだろう

ある種のミドルウェアだと思います。それはとてもエレガントで少し無駄に見えるので、私はまだこれを嫌いますが、私の唯一の選択肢はこのサーバー側を行うことだと思います。

4

1 に答える 1

9

Express 3は独自のHTTPサーバーを使用しないため(アプリをに渡す代わりにhttp.createServer)、指定しない限り、実行されているポートを認識しません。そうは言っても、基本的には次のことでやりたいことができます。

app.use(function(request, response, next) {
  var newHost = request.host.replace(/^www\./, '');
  if (request.host != newHost) {
    // 301 is a "Moved Permanently" redirect.
    response.redirect(301, request.protocol + "://" + newHost + request.url);
  } else {
    next();
  }
});

これをモジュールにエクスポートして、ポートを取得するジェネレーターでラップすることができます。

// no_www.js

module.exports = function(port) {
  app.use(function(request, response, next) {
    var newHost = request.host.replace(/^www\./, '');
    if (request.host != newHost) {
      var portStr = '';
      if (request.protocol == 'http' && port != 80) portStr = ':' + port;
      if (request.protocol == 'https' && port != 443) portSt r= ':' + port;
      // 301 is a "Moved Permanently" redirect.
      response.redirect(301, request.protocol + "://" + newHost + portStr + request.url);
    } else {
      next();
    }
  });
}

// app.js

var noWww = require('./no_www');
var app = express();

app.configure("development", function() {
  app.set("port", 3000);
});

...

app.use(noWww(app.get('port')));
于 2012-08-24T21:08:35.597 に答える