2012-02-05 13 views
13

Cosa voglio fare ogni volta che ottengo un errore 404 sul mio dominio, automaticamente 301 sulla home page.Nginx: Invio 301 Reindirizza quando 404 Errore

Ho un sacco di vecchi post di blog e simili a cui sono stati collegati, ma non li ho sul blog e se qualcuno capita di fare clic da un altro sito che viene kickato alla home page.

Come posso farlo all'interno di nginx?

server { 
     listen    12680; 
     root  /home/noahc/webapps/nginx/html/noahc/; 
     server_name www.noahc.net, noahc.net; 
     error_page 404 @foobar; 

     location @foobar { 
       rewrite .*/permanent; 
       } 
     } 

risposta

10

Ecco la soluzione finale che ho avuto modo di lavorare con Webfaction.

server { 
     listen    12440; 
     root  /some/path/here/nginx/html/noahc/; 
     server_name www.domain.net, domain.net; 
     port_in_redirect off; 

     location /{ 
      error_page 404 = @foobar; 
     } 

     location @foobar { 
      rewrite .*/permanent; 
     }  
} 
13

questo dovrebbe funzionare:

error_page 404 = @foobar; 

location @foobar { 
    rewrite .*/permanent; 
} 
+0

Ho questa messa a punto su noahc.net. Ogni volta che digito qualcosa in http://noahc.net/not-real-page.html, ad esempio, viene inviata a una pagina di errore dns di mediacom. Qualche idea? Ho riavviato nginx. –

+0

Ottengo '404 Not Found nginx/1.0.6' quando si visita il link precedente (collegamento non esistente), forse è un problema dalla tua parte (lato client)? – stewe

+0

in ogni caso non significa che non funzioni abbastanza bene? Non dovrei ricevere la parte di reindirizzamento e l'errore 301 o no? –

17

C'è un modo più veloce attraverso di essa:

error_page 404 = @foobar; 

location @foobar { 
    return 301 /; 
} 

Con "più veloce" Voglio dire "no corrispondenti regexp inutile all'interno del server web" utilizzando return invece di riscrittura.

+0

Brillante Mi piace –

5

L'impostazione error_page può fare questo per voi già:

error_page 404 =301 http://example.com/;