2013-05-19 16 views
15

Desidero reindirizzare tutti gli URL non corrispondenti alla mia home page. Vale a dire. qualcuno va a www.mysite.com/blah/blah/blah/foo/bar o www.mysite.com/invalid_url - Voglio reindirli a www.mysite.comCome reindirizzare tutti gli URL non corrispondenti con Express?

Ovviamente non voglio interferire con i miei URL validi.

Quindi c'è qualche identificatore di caratteri jolly che posso utilizzare per reindirizzare le richieste a questi URL non validi?

risposta

15

È possibile inserire un middleware 'catturare tutti', come ultima middleware/percorso nella catena espresso:

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

Io uso una tale impostazione per generare un costume 404 Not Found pagina.

+0

So che lo so, ma potresti voler mostrare la gerarchia in una configurazione esplicita in modo che ottengano questo nel giusto ordine. solo un suggerimento. – origin1tech

+0

@ C.Hazelton è per questo che ho incluso i commenti. Non abbastanza chiaro? Sarei felice di aggiungere altro :) – robertklep

+0

stava dicendo al contrario di commenti solo un suggerimento. – origin1tech

24

Aggiungi un percorso alla fine del resto dei percorsi.

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

Non sapevo che si potesse usare "tutti". Buona risposta. – Riwels

+3

Se si aggiunge una route di questo tipo, nessun middleware che si desidera utilizzare dopo i percorsi, come 'express.static', non verrà mai chiamato, anche se si include' app.all' dopo quella dichiarazione del middleware ([gist ] (https://gist.github.com/robertklep/5608473)). Potrebbe non essere un problema, ma può essere fonte di confusione. – robertklep

Problemi correlati