【问题标题】:Change HTTP status code for page in Adobe CQ5 (AEM)在 Adob​​e CQ5 (AEM) 中更改页面的 HTTP 状态代码
【发布时间】:2015-10-19 13:51:38
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: adobe aem sling


    【解决方案1】:

    您必须覆盖 /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" />
    

    【讨论】:

    • 我们已经在那个位置有一个 404.jsp,正如我在帖子中提到的,它所做的就是重定向到 page_not_found.html URL。代替在 JSP 中重建整个页面,我们缺乏技能,我问是否可以更改在常规 HTML 页面上返回的状态代码。
    • 知道了,您可能想要包含目标页面而不是重定向到它。我用建议的代码更新了上面的答案
    • 好的,这听起来可行。我会试一试,让你知道。谢谢。
    • 事实证明这是最简单的解决方案。谢谢你的主意。非常感谢。
    【解决方案2】:

    您可以使用这种代码相当轻松地设置响应代码: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

    【讨论】:

      猜你喜欢
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多