2013-05-19 23 views
15

Chcę przekierować wszystkie niedopasowane adresy URL na moją stronę główną. To znaczy. ktoś jedzie do www.mysite.com/blah/blah/blah/foo/bar lub www.mysite.com/invalid_url - Chcę je przekierować do www.mysite.comJak przekierować wszystkie niedopasowane adresy URL za pomocą Express?

Oczywiście nie chcę ingerować w moje poprawne adresy URL.

Czy istnieje również narzędzie do dopasowywania symboli wieloznacznych, za pomocą którego mogę przekierowywać żądania do tych nieprawidłowych adresów URL?

Odpowiedz

15

można wstawić 'catch all' middleware jako ostatni middleware/droga w wyraźnej łańcucha:

//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); 

używam takiej konfiguracji w celu wygenerowania niestandardowej 404 Not Found strony.

+0

Wiem, że znasz tego robota, ale możesz chcieć pokazać hierarchię w ekspresowej konfiguracji, aby uzyskać to we właściwej kolejności. tylko sugestia. – origin1tech

+0

@ C.Hazelton dlatego dodałem komentarze. Nie wystarczająco jasne? Byłbym szczęśliwy dodając więcej :) – robertklep

+0

mówiła w przeciwieństwie do komentarzy tylko sugestia. – origin1tech

24

Dodaj trasę na końcu pozostałych tras.

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

Nie wiedziałem, że możesz użyć "wszystkich". Dobra odpowiedź. – Riwels

+3

Jeśli dodasz taką trasę, żadne oprogramowanie pośrednie, którego chcesz używać po trasach, takie jak "express.static", nigdy nie będzie wywoływane, nawet jeśli dodasz "app.all" po deklaracji oprogramowania pośredniego ([gist ] (https://gist.github.com/robertklep/5608473)). Nie może to stanowić problemu, ale może być mylące. – robertklep

Powiązane problemy