Nginx. Отправка 404 ошибки на главную

Столкнулся с проблемой, при переходе с много страничного сайта на лендинг на WP. В Поиске было много линков со старыми адресами, но это же не красиво, поэтому пришлось сделать 301 редирект всех 404 страниц.

В конфигурационном файле виртуалхоста после основного location добавил еще переменную и еще один location
# Определяем страницу ошибки

1
error_page 404 = @notfound;

И отправляем все страницы по параметру на главную

1
2
3
location @notfound {
return 301 /;
}
Так же нужно добавить перехват ошибок в php-fpm инклуде хоста

1
2
location ~ \.php$ {
try_files $uri =404;

#Перехват ошибки 404

1
2
3
4
5
6
7
fastcgi_intercept_errors on;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/insom.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

Пример полного конфиг файла хоста

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
server {
listen 80;
server_name host.com.ua;
access_log /var/log/nginx/host.com.ua.access.log main;
error_log /var/log/nginx/host.com.ua.error.log;
root /var/www/user/host.com.ua/www;
index index.php index.html index.htm;
location ~* ^.+\.(rss|atom|jpg|jpeg|gif|png|ico|rtf|js|css|woff)$ {
expires max;
}
location / {
try_files $uri $uri/ /index.php?q=$request_uri;
}
error_page 404 = @notfound;
location @notfound {
return 301 /;
}

location ~ \.php$ {

try_files $uri =404;
fastcgi_intercept_errors on;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm/host.socket;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Этот конфиг был применен для CMS WordPress, на других еще не проверял.

Всем удачи.