Почему возник вопрос о создании статической страницы Ошибка 404 для сайта, созданного на популярном движке Вордпресс?
Краткая предыстория.
Чуть более месяца назад обнаружил, что мой хостер создал для моих сайтов бесплатные SSL сертификаты. И решил внести соответствующие настройки в файл .htaccess, чтобы все мои сайты, расположенные на данном хостинге открывались только с https.
Настройки сделал, все работает замечательно. Да вот только в скором времени заметил, что потребление ресурсов — загрузка процессора и память — резко возросло. Я поначалу никак не связал это с тем, что мои сайты теперь шифруются, прежде чем отдаются клиентам. А потому стал искать дыры в своих сайтах.
Заглянул в логи, в которые ранее я заглядывал крайне редко — только в случае резкого возрастания нагрузки на каком-то сайте. Вот и теперь был как раз такой случай. Только на этот раз нагрузку давал не один сайт, а все мои сайты попеременно. При этом посещаемость ни на одном из них значительно не возросла.
Первое, что заметил — это хотлинк с моего сайта. Один довольно посещаемый ресурс разместил ссылку на картинку, расположенную на моем хостинге. Этот момент я довольно быстро устранил. Как я с этим справился, отдельная тема. Пожалуй, стоит об этом рассказать в отдельной заметке.
Второй момент, из-за которого и возник вопрос, как сделать статическую (html) страницу Ошибка 404 для своих сайтов, созданных на Вордпресс, — большое количество запросов к несуществующим страницам. Причем, эти обращения шли и продолжают идти не от посетителей, а от различных ботов, в том числе и принадлежащих Яндексу и Гуглу.
Откуда плодятся эти ошибочные запросы, я пока не разобрался. И всех ботов блокировать не стал, а принял решение хоть частично снизить нагрузку на сервер путем создания статической страницы Ошибка 404.
Дело в том, что страница ошибки не кэшируется и каждый раз генерируется системой. Здесь и возникает закономерный вопрос: есть ли смысл каждый раз грузить сервер, заставляя его генерировать тысячный раз в сутки эту страницу? Не проще ли создать статичную страницу ошибки и показывать ее?
Однако не все так просто. Если создать html страницу Ошибка 404, загрузить ее в директорию сайта и попытаться просто в .htaccess добавить директиву ErrorDocument 404, то ничего не получится, так как Вордпресс сам определяет, какую страницу показывать в случае возникновения ошибки 404.
Немного порылся в интернете и нашел на одном англоязычном сайте довольно простое решение вопроса.
Чтобы вордпресс отдавал в качестве страницы Ошибка 404 созданный мной html документ, нужно в файл functions.php добавить следующий код:
add_action('wp','determine_if_404'); function determine_if_404(&$arr){ global $wp_query; if($wp_query->is_404){ header('Location: '.get_bloginfo('siteurl').'/404.html'); die; } }
И всех делов:) В данном случае подразумевается, что страница 404.html расположена в основной директории сайта. Если же решите расположить ее в какой-нибудь поддиректории, соответственно подкорректируйте адрес.