2012-02-05 4 views
13

Что я хочу делать, когда получаю ошибку 404 в своем домене, автоматически 301 на домашнюю страницу.Nginx: Return 301 Redirect When 404 Error

У меня есть много старых сообщений в блоге и таких, с которыми были связаны, но у меня их нет в блоге, и если кто-то случайно нажимает на другой сайт, на который они попадают на главную страницу.

Как это сделать внутри 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. –

+0

Я получаю '404 Not Found nginx/1.0.6' при посещении вышеуказанного (не существующая ссылка), может быть, это проблема на вашей стороне (на стороне клиента)? – stewe

+0

в любом случае не означает, что это не совсем работает? Разве я не должен получать редиректную часть и ошибку 301 или нет? –

17

Там более быстрый путь через него:

error_page 404 = @foobar; 

location @foobar { 
    return 301 /; 
} 

К «быстрее» я не имею в виду «не бесполезный регулярное выражение соответствия внутри веб-сервера» с помощью return вместо переписывания.

+0

Brilliant Мне это нравится –

5

Установка error_page может сделать это для вас уже:

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