Есть довольно много плагинов WordPress, которые помогут вам управлять ошибкой 404, чтобы улучшить ваш SEO. Ошибка 404 не найдено может возникнуть из-за удаления старых постов или страниц и не создает редирект или от спам-ботов. Это руководство покажет вам, как использовать Nginx для перенаправления ошибок 404 на главную страницу WordPress.
Это руководство требует Nginx и корневого доступа, так что вы можете изменить ваши виртуальные хосты Nginx.
Откройте виртуальный хост 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
Это должно работать!
Спасибо большое)