更改Adobe CQ5(AEM)中页面的HTTP状态代码

更改Adobe CQ5(AEM)中页面的HTTP状态代码,adobe,aem,sling,Adobe,Aem,Sling,我正在尝试支持由外部公司为我的公司开发的CQ5(5.5)安装 看来,我的公司想要一个漂亮的404页面,看起来像网站的其他部分,使用定制的Sling 404.jsp错误处理程序重定向到一个只说“页面未找到”的常规页面是最简单的方法。问题是404页面实际上返回了200状态码,因为它实际上只是一个带有“未找到”消息的常规内容页面 这给我们带来了谷歌和谷歌机器人的问题,因为谷歌认为所有指向现在不存在的页面的旧搜索链接仍然有效(200状态代码) 有没有办法配置CQ为我们显示的“未找到”HTML页面返回相应

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

看来,我的公司想要一个漂亮的404页面,看起来像网站的其他部分,使用定制的Sling 404.jsp错误处理程序重定向到一个只说“页面未找到”的常规页面是最简单的方法。问题是404页面实际上返回了200状态码,因为它实际上只是一个带有“未找到”消息的常规内容页面

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

有没有办法配置CQ为我们显示的“未找到”HTML页面返回相应的404状态代码?当我在CQ Author模式下编辑页面时,我在页面属性或可以添加到页面的组件中找不到任何内容


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

您必须覆盖
/libs/sling/servlet/errorhandler/404.jsp文件才能这样做-将其复制到
/apps/sling/servlet/errorhandler/404.jsp,并根据您的规范进行更改

如果您特别关注设置适当的响应状态代码,您可以通过设置相应的
response
属性:

response.setStatus(404);
更新:在设置响应状态后,您可能希望将其包括到404.jsp中,而不是重定向到
页面\u not_found.html

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

使用这种代码,您可以非常轻松地设置响应代码:
response.setStatus(SlingHttpServletResponse.SC\u未找到)

因此,例如,页面_not_found.jsp上的快速而肮脏的实现如下所示:

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

(或者更长期/更好的实现是通过标记和标记库来设置它,以避免使用scriptlet)


如果您的page_not_found.html页面是一个静态html页面,并且不是通过jsp呈现的,那么您可能需要更改404.jsp,使其重定向到通过jsp呈现的页面,这样这种方法才能工作。状态代码由呈现响应的服务器设置。它不是HTML本身固有的东西,因此您无法在常规的静态HTML页面中设置它。必须在服务器上执行某些操作才能设置此状态代码。另请参见

正如我在文章中提到的,我们在该位置已经有了一个404.jsp,它所做的是重定向到页面\u not\u found.html URL。在JSP中重建整个页面,这是我们缺乏的技能,我想问的是,是否可以更改常规HTML页面上返回的状态代码。明白了,您可能希望包括目标页面,而不是重定向到它。我用建议的代码更新了上面的答案OK,听起来是可行的。我试试看,然后告诉你。谢谢。这是最简单的解决办法。谢谢你的主意。非常感谢。