13 декабря 2011 г.

Новые релизы софта часто сопровождаются новыми багами, с которыми зачастую приходится мириться или бороться.

После очередного релиза MODx Revolution 2.1.5 я столнулся с проблемой отображения 404 ошибки. Проблема состояла в том, что в случае если в настройках MODx задана пользовательская страница с 404 страницей и запрашивался ресурс, который не существовал, сайт валился с ошибкой 330 ERR_CONTENT_DECODING_FAILED. Если error_page не был задан, отображалась стандартная 404 страница.

Активный поиск сводился к тому, что такая проблема встречалась редко, а разработчики MODx просто напросто не могли ее воспроизвести, чтобы хоть как-то помочь разработчикам. Видимо, проблемы как-то связаны с хостингом. Но решение я все же нашел.

Итак, на помощь к нам приходят плагины MODx, которые в отличие от сниппетов позволяют исполнять свой код при достижении определенных событий. Этим мы и воспользуемся. В MODx Revolution для этого имеется событие onPageNotFound. При достижении этого события нам нужно просто сделать редирект, а в этом нам поможет метод sendForward. Ниже привожу код плагина:


$modx->sendForward( $modx->config['error_page'], 'HTTP/1.0 404 Not Found');

Метод API sendForward принимает id ресурса, на который производится редирект и HTTP-заголовок, который будет отдаваться браузеру пользователя. Таким образом мы можем корректно отобразить 404 ошибку.

Автор: Артур Минимулин ⚫ 13 декабря 2011 г.Тэги: MODx, Revolution, Баг