Новые релизы софта часто сопровождаются новыми багами, с которыми зачастую приходится мириться или бороться.
После очередного релиза MODx Revolution 2.1.5 я столнулся с проблемой отображения 404 ошибки. Проблема состояла в том, что в случае если в настройках MODx задана пользовательская страница с 404 страницей и запрашивался ресурс, который не существовал, сайт валился с ошибкой 330 ERR_CONTENT_DECODING_FAILED. Если error_page не был задан, отображалась стандартная 404 страница.
Активный поиск сводился к тому, что такая проблема встречалась редко, а разработчики MODx просто напросто не могли ее воспроизвести, чтобы хоть как-то помочь разработчикам. Видимо, проблемы как-то связаны с хостингом. Но решение я все же нашел.
Итак, на помощь к нам приходят плагины MODx, которые в отличие от сниппетов позволяют исполнять свой код при достижении определенных событий. Этим мы и воспользуемся. В MODx Revolution для этого имеется событие onPageNotFound. При достижении этого события нам нужно просто сделать редирект, а в этом нам поможет метод sendForward. Ниже привожу код плагина:
Метод API sendForward принимает id ресурса, на который производится редирект и HTTP-заголовок, который будет отдаваться браузеру пользователя. Таким образом мы можем корректно отобразить 404 ошибку.