外部化URL

在AEM中,Externalizer​是一种OSGi服务,它允许您以编程方式转换资源路径(例如,/path/to/my/page)通过预配置的DNS来预定路径,从而将其置于外部和绝对URL(例如https://www.mycompany.com/path/to/my/page)中。

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

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

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

现成的Externalizer服务具有author-p12345-e6789.adobeaemcloud.compublish-p12345-e6789.adobeaemcloud.com之类的值。

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

配置外部器服务

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

注意

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

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

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

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

  2. 单击​Day CQ Link Externalizer​以打开配置对话框。

    外部器OSGi配置

    注意

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

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

    <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
    注意

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

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

使用外部器服务

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

注意

不应在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中找到更多示例。

在此页面上