web-dev-qa-db-ja.com

Nginx:404エラー時に301リダイレクトを返す

ドメインで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;
                }
         }
13
Noah Clark

これが私が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;
        }    
 }
12
Noah Clark

それを介してより速い方法があります:

error_page 404 = @foobar;

location @foobar {
  return 301 /;
}

「より高速」とは、書き換えの代わりに return を使用することで、「Webサーバー内で無駄な正規表現の一致がない」ことを意味します。

18
kworr

これは機能するはずです:

error_page 404 = @foobar;

location @foobar {
    rewrite  .*  / permanent;
}
13
stewe

error_page設定はすでにこれを行うことができます:

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

8
Jon