我正在尝试支持外部公司为我公司开发的CQ5(5.5)安装。
我的公司似乎想要一个漂亮的404页面,看起来像网站的其余部分,并使用自定义Sling 404.jsp错误处理程序重定向到仅显示“页面”的常规页面没找到“是最简单的方法。问题是404页面实际上返回了200状态代码,因为它实际上只是一个带有“Not Found”消息的常规内容页面。
这导致我们与Google和GoogleBot一起出现问题,因为Google认为现在不存在的所有旧搜索链接仍然有效(200状态代码)。
有没有办法配置CQ为我们显示的“未找到”HTML页面返回相应的404状态代码?当我在CQ作者模式下编辑页面时,我在页面属性或可以添加到页面的组件中找不到任何内容。
任何帮助都将受到赞赏,因为CQ并不完全是我的专业领域。
答案 0 :(得分:4)
您必须覆盖Hashes
文件才能执行此操作 - 将其复制到/libs/sling/servlet/errorhandler/404.jsp
并根据您的规范进行更改。
如果您正在专门设置适当的响应状态代码 - 您可以通过设置相应的/apps/sling/servlet/errorhandler/404.jsp
属性来实现:
response
更新:在设置响应状态后,您可能希望将其包含到404.jsp,而不是重定向到response.setStatus(404);
:
page_not_found.html
答案 1 :(得分:1)
您可以使用以下代码轻松设置响应代码:response.setStatus(SlingHttpServletResponse.SC_NOT_FOUND);
例如,page_not_found.jsp上的快速实现如下:
<%
response.setStatus(SlingHttpServletResponse.SC_NOT_FOUND);
%>
(或者更长期/更好的实现是通过标记和标记库设置它以避免scriptlet)
如果您的page_not_found.html页面是静态HTML页面而不是通过jsp呈现,您可能需要更改404.jsp,以便重定向到通过jsp呈现的页面,以使此方法起作用。状态代码由呈现响应的服务器设置。它本身并不是HTML本身的内容,因此您无法在常规的静态HTML页面中进行设置。必须在服务器上执行某些操作才能设置此状态代码。另请参阅 How to Return Specific HTTP Status Code in a Plain HTML Page