Nginx:404错误时返回301重定向

Posted

技术标签:

【中文标题】Nginx:404错误时返回301重定向【英文标题】:Nginx: Return 301 Redirect When 404 Error 【发布时间】:2012-02-27 04:55:04 【问题描述】:

每当我在我的域上收到 404 错误时,我想做什么,自动 301 到主页。

我有很多旧的博客文章和类似的链接,但我的博客上没有它们,如果有人碰巧从另一个网站点击,他们就会被踢到主页。

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

【问题讨论】:

【参考方案1】:

error_page 设置已经可以为您做到这一点:

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

【讨论】:

【参考方案2】:

有一个更快的方法:

error_page 404 = @foobar;

location @foobar 
  return 301 /;

我所说的“更快”是指通过使用 return 而不是重写来“在 Web 服务器内没有无用的正则表达式匹配”。

【讨论】:

太棒了,我喜欢它【参考方案3】:

这是我使用 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;
            
 

【讨论】:

【参考方案4】:

这应该可行:

error_page 404 = @foobar;

location @foobar 
    rewrite  .*  / permanent;

【讨论】:

我在 noahc.net 上有这个设置。例如,每当我在noahc.net/not-real-page.html 中输入内容时,我都会被发送到 mediacom dns 错误页面。有任何想法吗?我已经重启了 nginx。 我在访问上述(不存在的链接)时收到404 Not Found nginx/1.0.6,也许这是您这边(客户端)的问题? 在任何情况下这并不意味着它不能正常工作吗?我不应该得到重定向部分和 301 错误吗? 是的,它不能正常工作,你应该被重定向。请张贴您的 server .. 块,可能是其他原因阻止它工作。 这似乎不是正确的服务器-block,因为您的网站在端口 80 而不是 12680 (listen 12680;) 上运行。否则,该块看起来没问题,应该可以工作。

以上是关于Nginx:404错误时返回301重定向的主要内容,如果未能解决你的问题,请参考以下文章

SSL 301 重定向错误 - Joomla 和 Nginx

http 301 302 303 307 308 傻傻分不清

nginx为啥返回301重定向

SEO - 通过 404 页面重定向 301

nginx怎么根据url前缀实现301重定向?

301重定向时nginx保留端口号