2012-02-05 39 views
13

Điều tôi muốn làm bất cứ khi nào tôi nhận được lỗi 404 trên miền của mình, tự động 301 vào trang chủ.Nginx: Trả lại 301 Chuyển hướng khi 404 Lỗi

Tôi có rất nhiều bài đăng trên blog cũ và những bài đăng như vậy đã được liên kết nhưng tôi không có chúng trên blog và nếu có ai đó nhấp qua từ một trang web khác mà họ bị bắt vào trang chủ.

Tôi có thể làm điều này bên trong nginx bằng cách nào?

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; 
       } 
     } 

Trả lời

10

Dưới đây là giải pháp cuối cùng mà tôi đã làm việc sử dụng 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

này nên làm việc:

error_page 404 = @foobar; 

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

tôi đã thiết lập này trên noahc.net. Bất cứ khi nào tôi gõ một cái gì đó trong http://noahc.net/not-real-page.html ví dụ, tôi nhận được gửi đến một trang lỗi diac mediacom. Bất kỳ ý tưởng? Tôi đã khởi động lại nginx. –

+0

Tôi nhận được '404 Not Found nginx/1.0.6' khi truy cập vào liên kết (không tồn tại) ở trên, có thể đó là vấn đề ở phía bạn (phía máy khách)? – stewe

+0

trong mọi trường hợp không có nghĩa là nó không hoạt động đúng không? Tôi có nên nhận phần chuyển hướng và lỗi 301 hay không? –

17

Có một cách nhanh hơn thông qua nó:

error_page 404 = @foobar; 

location @foobar { 
    return 301 /; 
} 

Bằng cách "nhanh" Ý tôi là "không phù hợp với regexp vô dụng bên trong máy chủ web" bằng cách sử dụng return thay vì viết lại.

+0

Tôi thích nó –

5

Thiết lập error_page có thể làm điều này cho bạn đã:

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

Các vấn đề liên quan