2012-02-05 18 views
13

Lo que quiero hacer cada vez que aparece un error 404 en mi dominio, automáticamente 301 en la página de inicio.Nginx: Return 301 Redirect When 404 Error

Tengo un montón de entradas de blog antiguas y las que estaban vinculadas a, pero no las tengo en el blog y si alguien hace clic desde otro sitio que las echan a la página de inicio.

¿Cómo puedo hacer esto dentro de 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; 
       } 
     } 

Respuesta

10

Aquí está la solución final que llegué a trabajar usando 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

esto debería funcionar:

error_page 404 = @foobar; 

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

tengo esta configuración en noahc.net. Cada vez que escribo algo en http://noahc.net/not-real-page.html por ejemplo, me envían a una página de error de mediacom dns. ¿Algunas ideas? He reiniciado nginx. –

+0

Obtengo '404 Not Found nginx/1.0.6' al visitar el enlace anterior (enlace no existente), tal vez es un problema de su lado (del lado del cliente)? – stewe

+0

en cualquier caso, ¿no significa que no está funcionando del todo bien? ¿No debería obtener la parte de redireccionamiento y el error 301 o no? –

17

Hay una manera más rápida a través de él:

error_page 404 = @foobar; 

location @foobar { 
    return 301 /; 
} 

Por "más rápido" que significa "no coincidencia de expresión regular inútil dentro del servidor web" mediante el uso de return en lugar de reescritura.

+0

Brilliant Me gusta –

5

El ajuste error_page puede hacer esto para usted ya:

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