2012-02-05 131 views
13

當我在我的域名上發生404錯誤時,我想要做的事情是自動301到主頁。Nginx:返回301重定向404錯誤

我有很多舊的博客文章和這樣的鏈接,但我沒有他們在博客上,如果有人碰巧從另一個網站點擊,他們被踢到主頁。

我該如何在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; 
       } 
     } 

回答

10

下面是最終的解決方案,我用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

這應該工作:

error_page 404 = @foobar; 

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

我有noahc.net此設置。例如,當我在http://noahc.net/not-real-page.html輸入內容時,我會發送到mediacom DNS錯誤頁面。有任何想法嗎?我重新啓動了nginx。 – 2012-02-05 15:31:21

+0

訪問上述(不存在的鏈接)時,我會得到'404 Not Found nginx/1.0.6',也許這是你身邊的一個問題(客戶端)? – stewe 2012-02-05 18:49:13

+0

在任何情況下都不意味着它不是很正常工作?我不應該得到重定向部分和301錯誤或不? – 2012-02-05 21:11:27

17

有一種更快的方式,通過它:

error_page 404 = @foobar; 

location @foobar { 
    return 301 /; 
} 

通過「更快」我的意思是「Web服務器內部沒有無用的正則表達式匹配」通過使用return而不是重寫。

+0

Brilliant我喜歡它 – 2016-10-07 01:34:21

5

error_page設置能爲你已經做到這一點:

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