これを行うための最良の方法は何ですか?
www.mysite.com
すべてのリクエストをからにリダイレクトしたいmysite.com
*.mysite.com
理想的mysite.com
だろう
ある種のミドルウェアだと思います。それはとてもエレガントで少し無駄に見えるので、私はまだこれを嫌いますが、私の唯一の選択肢はこのサーバー側を行うことだと思います。
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')));