外部化URL

在AEM中, 外部器 是一种OSGi服务,它允许您以编程方式转换资源路径(例如, /path/to/my/page)到外部和绝对URL(例如, https://www.mycompany.com/path/to/my/page),方法是使用预配置的DNS来预定路径。

由于AEMas a Cloud Service实例无法知道其外部可见的URL,并且由于有时必须在请求范围之外创建链接,因此此服务提供了一个中心位置来配置这些外部URL并构建它们。

本文介绍如何配置外部器服务及其使用方法。 有关该服务的技术详情,请参阅 Javaocs.

外部器的默认行为和如何覆盖

现成的Externalizer服务具有如下值: author-p12345-e6789.adobeaemcloud.compublish-p12345-e6789.adobeaemcloud.com.

要覆盖此类值,请按照文章中所述使用Cloud Manager环境变量 为AEMas a Cloud Service配置OSGi 和设置预定义 AEM_CDN_DOMAIN_AUTHORAEM_CDN_DOMAIN_PUBLISH 变量。

配置外部器服务

Externalizer服务允许您集中定义可用于以编程方式为资源路径添加前缀的域。 外部器服务应仅用于具有单个域的应用程序。

注意

与应用任何 AEMas a Cloud Service的OSGi配置, 应对本地开发人员实例执行以下步骤,然后将其提交到您的项目代码以进行部署。

要为外部器服务定义域映射,请执行以下操作:

  1. 通过以下方式导航到配置管理器:

    https://<host>:<port>/system/console/configMgr

  2. 单击 Day CQ链接外部器 打开配置对话框。

    外部器OSGi配置

    注意

    配置的直接链接是 https://<host>:<port>/system/console/configMgr/com.day.cq.commons.impl.ExternalizerImpl

  3. 定义 映射。 映射由唯一名称组成,该名称可在代码中用于引用域、空格和域:

    <unique-name> [scheme://]server[:port][/contextpath]

    其中:

    • scheme 通常为http或https,但可以是其他协议。

      • 建议使用https来强制使用https链接。
      • 如果客户端代码在请求将URL外部化时不覆盖方案,则将使用该URL。
    • server 是主机名(域名或ip地址)。

    • port (可选)是端口号。

    • contextpath (可选)仅当AEM作为Web应用程序安装在其他上下文路径下时才进行设置。

    例如:production https://my.production.instance

    以下映射名称是预定义的,且必须始终设置,因为AEM依赖于这些映射名称:

    • local — 本地实例
    • author — 创作系统DNS
    • publish — 面向公众的网站DNS
    注意

    自定义配置允许您添加新类别,例如 production, staging 甚至外部非AEM系统,例如 my-internal-webservice. 避免在项目代码库中的不同位置对此类URL进行硬编码非常有用。

  4. 单击 保存 以保存更改。

使用外部器服务

此部分显示如何使用外部器服务的一些示例。

注意

不应在HTML上下文中创建绝对链接。 因此,在此类情况下不应使用此实用程序。

  • 要将路径外部化为“publish”域,请执行以下操作:

    String myExternalizedUrl = externalizer.publishLink(resolver, "/my/page") + ".html";
    

    假设域映射:

    • publish https://www.website.com

    • myExternalizedUrl 最后是值:

    • https://www.website.com/contextpath/my/page.html

  • 要将路径外部化为“author”域,请执行以下操作:

    String myExternalizedUrl = externalizer.authorLink(resolver, "/my/page") + ".html";
    

    假设域映射:

    • author https://author.website.com

    • myExternalizedUrl 最后是值:

    • https://author.website.com/contextpath/my/page.html

  • 要将路径外部化为“本地”域,请执行以下操作:

    String myExternalizedUrl = externalizer.externalLink(resolver, Externalizer.LOCAL, "/my/page") + ".html";
    

    假设域映射:

    • local https://publish-3.internal

    • myExternalizedUrl 最后是值:

    • https://publish-3.internal/contextpath/my/page.html

小贴士

您可以在 Javaocs.

在此页面上