2012-02-05 177 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/;