Статус 200 для 404 Не найдена страница CMS
Короче говоря, Magento возвращает статус 200 для страницы 404 Not Found CMS, для того, что кажется довольно стандартной конфигурацией:
Все работает нормально, когда URL-адрес изменен на cms/index/defaultNoRoute
, страница по умолчанию "Не найдена" загружается со статусом 404.
Кроме того, абсолютно все отлично работает на копии веб-сайта на другом сервере. Что заставило бы меня заподозрить конфигурацию Apache. Не уверен, однако, на что обращать внимание для.
Вот заголовки ответов как для действий defaultNoRoute, так и для действий Noroute:
$ curl -I http://www.server.com/cms/index/defaultNoRoute
HTTP/1.1 404 Not Found
Date: Thu, 25 Apr 2013 12:56:07 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
Set-Cookie: frontend=332f53c81eee1f730f430c0f59e0dd83; expires=Thu, 25-Apr-2013 13:56:08 GMT; path=/; domain=www.server.com; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Status: 404 File not found
Vary: Accept-Encoding,User-Agent
Content-Type: text/html; charset=UTF-8
$ curl -I http://www.server.com/cms/index/noRoute
HTTP/1.1 200 OK
Date: Thu, 25 Apr 2013 12:56:11 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
Set-Cookie: frontend=361b3804feaea66a6fcdf1aee048ce44; expires=Thu, 25-Apr-2013 13:56:12 GMT; path=/; domain=www.server.com; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding,User-Agent
Content-Type: text/html
Кто-нибудь может указать мне правильное направление? Ваше здоровье.
1 answers
По моему опыту, это чаще всего вызвано плохо написанными интеграциями CMS. Нередко интеграция CMS переписывает действие noRoute, чтобы перехватить, когда Magento выдаст 404, захватить контент с CMS (если он доступен), а затем предоставить его в разделе содержимого страницы.
Однако что идет не так, так это когда эти пользовательские интеграции затем не обнаруживают, когда у них также нет содержимого для URL-адреса в CMS, и без разбора отправляют код ответа 200 с пустым содержимым или страницей содержимого 404, предоставленной CMS (но с кодом ответа 200).
В случае отсутствия содержимого в этом типе интеграции хитрость заключается в том, чтобы просто перенаправить запрос на действие без маршрута по умолчанию и/или выполнить его и позволить методу родительского контроллера обработать ответ 404.
Установлен ли у вас какой-либо модуль интеграции CMS? Если это так, я бы предложил изолировать его, чтобы либо доказать, либо исключить его в качестве причины.