在 Adob​​e CQ5 (AEM) 中更改页面的 HTTP 状态代码

Change HTTP status code for page in Adobe CQ5 (AEM)

我正在尝试支持由外部公司为我的公司开发的 CQ5 (5.5) 安装。

看来我的公司想要一个看起来像网站其余部分的漂亮 404 页面,并使用 自定义 Sling 404.jsp 错误处理程序 重定向到仅显示 "Page Not Found" 的常规页面是最简单的方法。问题是 404 页面实际上 return 是一个 200 状态代码,因为它实际上只是一个带有 "Not Found" 消息的常规内容页面。

这给我们带来了 Google 和 GoogleBot 的问题,因为 Google 认为所有指向现在不存在的页面的旧搜索链接仍然有效(200 状态代码).

有什么方法可以将 CQ 配置为 return 我们显示的 "not found" HTML 页面的适当 404 状态代码?当我在 CQ 作者模式下编辑页面时,我在页面属性或可添加到页面的组件中找不到任何内容。

任何帮助将不胜感激,因为 CQ 并不是我的专业领域。

为此,您必须覆盖 /libs/sling/servlet/errorhandler/404.jsp 文件 - 将其复制到 /apps/sling/servlet/errorhandler/404.jsp 并根据您的规格进行更改。

如果您正在专门研究设置适当的响应状态代码 - 您可以通过设置相应的 response 属性:

response.setStatus(404);

更新:您可能希望在设置响应状态后将其包含到 404.jsp,而不是重定向到 page_not_found.html

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

您可以使用这种代码相当轻松地设置响应代码:response.setStatus(SlingHttpServletResponse.SC_NOT_FOUND);

因此,例如,在您的 page_not_found.jsp 上的快速实施如下:

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

(或 longer-term/better 实现将通过标签和标签库设置它以避免 scriptlet)

如果您的 page_not_found.html 页面是静态 HTML 页面并且不是通过 jsp 呈现的,您可能需要更改 404.jsp 以便它重定向到页面这是通过 jsp 呈现的,以使这种方法起作用。状态代码由呈现响应的服务器设置。它不是 HTML 本身固有的东西,因此您将无法在常规的静态 HTML 页面中设置它。必须在服务器上做一些事情来设置这个状态代码。另见