Nginx: возвращать 301 перенаправление при ошибке 404 - PullRequest
13 голосов
/ 05 февраля 2012

Что я хочу делать всякий раз, когда я получаю ошибку 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;
                }
         }

Ответы [ 4 ]

18 голосов
/ 29 июля 2014

Есть более быстрый путь:

error_page 404 = @foobar;

location @foobar {
  return 301 /;
}

Под "быстрее" я подразумеваю "нет бесполезного сопоставления регулярных выражений внутри веб-сервера", используя return вместо перезаписи.

13 голосов
/ 05 февраля 2012

Это должно работать:

error_page 404 = @foobar;

location @foobar {
    rewrite  .*  / permanent;
}
12 голосов
/ 16 февраля 2012

Вот окончательное решение, которое я получил для работы с использованием 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;
        }    
 }
7 голосов
/ 22 октября 2016

Настройка error_page может сделать это для вас уже:

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

...