2015-10-19 4 views
3

Я пытаюсь поддержать установку CQ5 (5.5), разработанную внешней фирмой для моей компании.Изменить код состояния HTTP для страницы в Adobe CQ5 (AEM)

Похоже, что моя компания хотела красивую страницу 404, которая была похожа на остальной части сайта, а также с помощью пользовательского обработчика ошибок Sling 404.jsp для перенаправления на обычную страницу, которая просто говорит: «Страница не найдена» было это самый простой способ сделать это. Проблема в том, что страница 404 фактически возвращает код состояния 200, поскольку на самом деле это просто обычная страница контента, на которой есть сообщение «Not Found».

Это вызывает у нас проблемы с Google и GoogleBot, поскольку Google полагает, что все старые поисковые ссылки на несуществующие страницы по-прежнему действительны (код состояния 200).

Есть ли способ настроить CQ для возврата соответствующего кода статуса 404 для отображаемой HTML-страницы «не найден»? Когда я нахожусь в режиме редактирования CQ Author, редактирую страницу, я ничего не вижу в свойствах страницы или в компонентах, которые могут быть добавлены на страницу.

Любая помощь будет оценена, так как CQ - это не моя область знаний.

ответ

4

Вам необходимо наложить файл /libs/sling/servlet/errorhandler/404.jsp, чтобы сделать это - скопируйте его в /apps/sling/servlet/errorhandler/404.jsp и измените в соответствии с вашими спецификациями.

И если вы ищете специально в настройке соответствующего кода состояния ответа - вы можете сделать это, установив соответствующее response свойства:

response.setStatus(404); 

UPDATE: вместо того, чтобы перенаправлять на page_not_found.html вы можете включить его в 404.jsp после установки статуса ответа:

<sling:include path="path/page_not_found.html" /> 
+0

У нас уже есть 404.jsp в этом месте, как я упоминал в сообщении, и то, что он делает, перенаправляется на URL-адрес page_not_found.html. Вместо того, чтобы перестраивать всю страницу в JSP, нам не хватает набора навыков, я спрашиваю, можно ли изменить код состояния, возвращаемый на обычной HTML-странице. –

+0

Gotcha, вы можете включить целевую страницу вместо перенаправления на нее. Я обновил ответ выше с предлагаемым кодом –

+0

ОК, это звучит выполнимо. Я попробую и дам вам знать. Благодарю. –

1

Вы можете установить код ответ довольно легко с таким родом код: response.setStatus(SlingHttpServletResponse.SC_NOT_FOUND);

Так, например, быстрая и грязная реализация на вашем page_not_found.jsp будет выглядеть следующим образом:

<% 
response.setStatus(SlingHttpServletResponse.SC_NOT_FOUND); 
%> 

(или более длительный срок/более эффективное осуществление было бы установить его с помощью тегов и чтобы избежать скриптов)

Если ваша страница page_not_found.html является статической HTML-страницей и не отображается через jsp, вам может потребоваться изменить 404.jsp, чтобы она перенаправлялась на страницу, которая отображается через jsp для этот подход к работе. Код состояния задается сервером, отображающим ответ. Это не является неотъемлемой частью самого HTML, поэтому вы не сможете установить его на обычной статической странице HTML. Что-то нужно сделать на сервере, чтобы установить этот код состояния. Также см. How to Return Specific HTTP Status Code in a Plain HTML Page

Смежные вопросы