在 AEM 中如何将 content/site 结构隐藏到 public?

What could be done to hide the content/site structure to public in AEM?

我们的网站是使用 AEM 6.5 构建的。内容结构是这样的- /content/site/en.

我们面临的问题是内容结构在 google 搜索中可见。例如,如果我们搜索牛仔布,我们当前得到的结果是-

www.site.com/content/site/en/denim.html

预期结果-

www.site.com/denim.html

从结果中隐藏结构的不同选项有哪些?谢谢!

资源映射可以帮助您实现向外界隐藏内容结构的目标。

Here 是 link 可能对您有更多帮助。

您正在寻找 URL 起酥油。 This 文章详细讨论了如何 URL 缩短。

URL 缩短 - 当内容作者使用路径选择器策划内部 link 时,我们希望相应的锚 link href 得到URL 缩短并附加 .html。最常见的做法是使用 LinkRewriter。 This , this, this 是同一实现的不同示例。这将负责从 href=/content/site/en/denim.html 更改为 href=/en/denim.html。这是即将离任的 links.

传入的资源解析 links - 接下来我们还需要反向也发生。当有人点击 href=www.site.com/en/denim.html 时,我们希望 AEM 将其解析为 /content/site/en/denim 页面。为此,(通常)有两种方法:1)使用 apache 重写规则,2)Sling 资源映射。另一种可能的技术可能是使用 CDN Edge 规则,但我还没有在任何地方看到这一点。

AEM 的常见 http 请求采用以下路径:浏览器 -> CDN -> Apache -> AEM 发布者。在这个路径中,我们可以在 Apache 或 AEM

将 /denim.html 转换为 /content/site/en/denim

Apache重写规则:当请求到达apache时,我们使用mod_rewrite module to rewrite incoming traffic to AEM resolvable path. For example a simple rule RewriteRule ^/en/(.*) /content/site/en/ [PT] will change /en/denim./html to /content/site/en/denim.html. Refer here

  • Apache 会看到 -> /en/denim.html
  • AEM 会看到 -> /content/site/en/denim.html

所以 URL 已经解析为 AEM 可理解的路径。 AEM 发布者可以轻松解析此资源路径并呈现。

Sling 映射: 第二种方法是让 apache 成为一个愚蠢的缓存机器,将流量直接发送给发布者,并要求发布者解决。

  • Apache 会看到 -> /en/denim.html
  • AEM 会看到 -> /en/denim.html

在/etc/maps中,我们实现了internalRedirectRules。 AEM 在开始处理请求之前,会查找 sling 映射,将传入请求解析为有效的资源路径,然后开始呈现业务。

这两种技术各有利弊。但 Apache 重写是更可取的,因为 AEM 已经忙于其他渲染工作。

总结:

  1. 构建 Link 重写器 - 用于传出 links
  2. 构建重写 rules/sling 映射器 - 用于传入 links.