apache - 如何在 AEM 中向公众隐藏内容/站点结构?
问题描述
我们的网站使用 AEM 6.5 构建。内容结构是这样的 - /content/site/en
。
我们面临的问题是内容结构在谷歌搜索中可见。例如,如果我们搜索 denim,我们目前得到的结果——
www.site.com/content/site/en/denim.html
预期的结果——
www.site.com/denim.html
从结果中隐藏结构的不同选项可能是什么?谢谢!
解决方案
您正在寻找 URL 缩短。本文准确地讨论了如何缩短 URL。
URL 缩短- 当内容作者使用路径选择器管理内部链接时,我们希望相应的锚链接 href 缩短 URL 并附加 .html。最常见的做法是使用 LinkRewriter。this , this , this是相同实现的不同示例。这将负责从 href=/content/site/en/denim.html 更改为 href=/en/denim.html。这是传出链接。
传入链接的资源解析- 接下来我们还需要反向进行。当有人点击 href=www.site.com/en/denim.html 时,我们希望 AEM 将其解析为 /content/site/en/denim 页面。要做到这一点,(通常)有 2 种方法:1)使用 apache 重写规则,2)Sling 资源映射。另一种可能的技术可能是使用 CDN Edge 规则,但我在任何地方都没有看到这一点。
对 AEM 的常见 http 请求采用以下路线:浏览器 -> CDN -> Apache -> AEM 发布者。在这个路径中,我们可以在 Apache 或 AEM 中将 /denim.html 转换为 /content/site/en/denim
Apache 重写规则:当请求到达 apache 时,我们使用mod_rewrite模块将传入流量重写到 AEM 可解析路径。例如,一个简单的规则RewriteRule ^/en/(.*) /content/site/en/$1 [PT]
会将 /en/denim./html 更改为 /content/site/en/denim.html。参考这里。
- Apache 将看到 -> /en/denim.html
- AEM 将看到 -> /content/site/en/denim.html
因此 URL 已解析为 AEM 可理解的路径。AEM 发布者可以轻松解决此资源和渲染路径。
吊索映射:第二种技术是让 apache 成为一个哑缓存机器,将流量直接发送到发布者,并请求发布者解析。
- Apache 将看到 -> /en/denim.html
- AEM 将看到 -> /en/denim.html
在 /etc/maps 中,我们实现了 internalRedirectRules。AEM 在开始处理请求之前,会查找 sling 映射,将传入的请求解析为有效的资源路径,然后开始渲染业务。
这两种技术都有优点和缺点。但是 Apache 重写更可取,因为 AEM 已经忙于其他渲染工作。
概括:
- 构建链接重写器 - 用于传出链接
- 为传入链接构建重写规则/吊索映射器。
推荐阅读
- python - 将列表插入到特定索引处的二维列表
- dictionary - 可在地图上观察以检测何时添加、更新或删除条目
- android - 使用 TCP 套接字获取 Json 数据
- inno-setup - 可以在此脚本中减少注册表项的数量吗?
- java - java非阻塞缓存实现
- google-cloud-platform - 如何验证 Google Cloud Endpoints 服务 URL 的所有权?
- python - Pandas - 导入大小为 4GB 的 CSV 文件时出现内存错误
- python - 如果我希望它也打印其他事件,我的 python 程序会继续打印相同的 id 事件
- c# - 如何绕过重复代码 Mongo/Core API
- xamarin.forms - 我怎样才能在 xamarin 表单中使用步进器发送属性 ID?