Nginx: Return 301 Redirect When 404 Error

2019-01-24 04:27发布

问题:

What I want to do whenever I get a 404 error on my domain, automatically 301 to the homepage.

I have a lot of old blog posts and such that were linked to, but I don't have them on the blog and if anyone happens to click through from another site that they get kicked to the homepage.

How can I do this inside 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:

There's a faster way through it:

error_page 404 = @foobar;

location @foobar {
  return 301 /;
}

By "faster" I mean "no useless regexp matching inside web server" by using return instead of rewrite.



回答2:

This should work:

error_page 404 = @foobar;

location @foobar {
    rewrite  .*  / permanent;
}


回答3:

Here is the final solution that I got to work using 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:

The error_page setting can do this for you already:

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