2013-05-19 3 views
15

私はすべての不一致なURLを私のホームページにリダイレクトしたいと思います。つまり誰かがwww.mysite.com/blah/blah/blah/foo/barまたはwww.mysite.com/invalid_urlに行く - 私はもちろん、私は私の有効なURLに干渉したくないwww.mysite.comExpressと一致しないすべてのURLをどのようにリダイレクトするのですか?

にリダイレクトします。

これらの無効なURLにリクエストをリダイレクトするために使用できるワイルドカードマッチャーはありますか?

答えて

15

あなたはエクスプレスチェーンの最後のミドルウェア/ルートとしてミドルウェア「すべてをキャッチ」を挿入することができます

//configure the order of operations for request handlers: 
app.configure(function(){ 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.cookieParser()); 
    app.use(express.static(__dirname+'/assets')); // try to serve static files 
    app.use(app.router);       // try to match req with a route 
    app.use(redirectUnmatched);     // redirect if nothing else sent a response 
}); 

function redirectUnmatched(req, res) { 
    res.redirect("http://www.mysite.com/"); 
} 

... 

// your routes 
app.get('/', function(req, res) { ... }); 
... 

// start listening 
app.listen(3000); 

私はカスタム404 Not Foundページを生成するために、このようなセットアップを使用します。

+0

私はあなたがこのrobを知っていることを知っていますが、正しい順序でこれを得るように、エクスプレス設定で階層を表示したいかもしれません。ほんの一言。 – origin1tech

+0

@ C.Hazeltonだから私はコメントを含めた。十分に明確ではない?私はより多くを追加して喜んででしょう:) – robertklep

+0

は、ちょうど提案をコメントに反対して言っていた。 – origin1tech

24

残りのルートの最後にルートを追加します。

app.all('*', function(req, res) { 
    res.redirect("http://www.mysite.com/"); 
}); 
+0

「すべて」を使用できるかどうかはわかりませんでした。いい答えだ。 – Riwels

+3

このようなルートを追加すると、 'express.static'のようなルートの後に使用したいミドルウェアは、そのミドルウェア宣言の後に' app.all'を含めても、決して呼び出されません([gist ](https://gist.github.com/robertklep/5608473))。問題ではないかもしれませんが、混乱する可能性があります。 – robertklep

関連する問題