Nginx. Перенаправление ошибки 404 на главную страницу в WordPress

Есть довольно много плагинов WordPress, которые помогут вам управлять ошибкой 404, чтобы улучшить ваш SEO. Ошибка 404 не найдено может возникнуть из-за удаления старых постов или страниц и не создает редирект или от спам-ботов. Это руководство покажет вам, как использовать Nginx для перенаправления ошибок 404 на главную страницу WordPress.
Это руководство требует Nginx и корневого доступа, так что вы можете изменить ваши виртуальные хосты Nginx.
Nginx. Перенаправление ошибки 404 на главную страницу в WordPress
Откройте виртуальный хост Nginx
sudo nano /etc/nginx/sites-available/andreyex.ru
Добавьте этот фрагмент в блоке сервера
# определить страницу ошибки
error_page 404 = @notfound;
# Адрес страницы ошибки 301 для редиректа
location @notfound {
return 301 /;
}
Если вы не хотите делать 301 постоянную переадресацию, вы можете в место этого использовать 302 (временный редирект)
# определить страницу ошибки
error_page 404 = @notfound;
# адрес страницы ошибки 302 для перенаправления
location @notfound {
return 302 /;
}
В РНР блоке установить fastcgi_intercept_errors в on
В качестве альтернативы вы можете поместить его в файл nginx.conf в блок http { block
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
# перехват ошибки 404 для редиректа
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Для наглядности здесь приведен пример виртуального хоста в Nginx для WordPress с указанными выше добавками
server {
listen 80;
server_name andreyex.ru;
root /var/www/nginx/andreyex.ru;
index index.php index.html;
access_log /var/log/nginx/andreyex.ru.log;
error_log /var/log/nginx/andreyex.ru.error.log;
location / {
try_files $uri $uri/ /index.php?$args /;
}
# определить страницу ошибки
error_page 404 = @notfound;
# расположение страницы ошибки для редиректа 301
location @notfound {
return 301 /;
}
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
# перехват ошибки 404 для редиректа
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
location = /nginx.conf {
deny all;
}
}
Проверьте ваш синтаксис виртуального хоста Nginx перед активацией
sudo nginx -t
Если ваш синтаксис был ОК, то перезагрузить службу Nginx
sudo service nginx reload
Это должно работать!
Редактор: AndreyEx

Спасибо большое)