將URL外部化

在AEM中,Externalizer​是OSGi服務,可讓您以程式設計方式轉換資源路徑(例如/path/to/my/page)填入外部和絕對URL(例如https://www.mycompany.com/path/to/my/page),方法是使用預先設定的DNS來預先修正路徑。

由於AEM作為Cloud Service例項無法知道其外部可見的URL,且由於有時必須在請求範圍外建立連結,因此此服務提供一個集中位置,可設定這些外部URL並建置這些URL。

本文說明如何配置Externalizer服務及如何使用它。 有關該服務的技術詳細資訊,請參閱Javadocs

Externalizer的預設行為和How to Override

現成可用的Externalizer服務具有author-p12345-e6789.adobeaemcloud.compublish-p12345-e6789.adobeaemcloud.com等值。

若要覆寫這些值,請使用為AEM設定OSGi作為Cloud Service一文所述的Cloud Manager環境變數,並設定預先定義的AEM_CDN_DOMAIN_AUTHORAEM_CDN_DOMAIN_PUBLISH變數。

配置Externalizer服務

Externalizer服務允許您集中定義可用於以寫程式方式為資源路徑前置詞的域。 Externalizer服務僅應用於具有單個域的應用程式。

注意

如同套用AEM as aCloud Service的任何OSGi設定時,應在本機開發人員執行個體上執行下列步驟,然後提交至您的專案程式碼以進行部署。

要定義Externalizer服務的域映射,請執行以下操作:

  1. 透過以下網址導覽至Configuration Manager:

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

  2. 按一下​Day CQ Link Externalizer​以開啟設定對話方塊。

    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安裝為位於不同內容路徑下的網頁應用程式時才會設定。

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

    下列對應名稱是預先定義的,且必須一律設定,因為AEM需仰賴這些名稱:

    • local — 本機執行個體
    • author — 編寫系統DNS
    • publish — 公開對應的網站DNS
    注意

    自訂設定可讓您新增新類別,例如productionstaging或甚至外部非AEM系統,例如my-internal-webservice。 建議您避免在專案的程式碼基底中不同位置對這類URL進行硬式編碼。

  4. 按一下​儲存​以儲存變更。

使用Externalizer服務

本節介紹如何使用Externalizer服務的一些示例。

注意

不應在HTML內容中建立絕對連結。 因此,不應在此類情況下使用此實用程式。

  • 若要將具有'publish'網域的路徑外部化:

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

    假設網域對應:

    • publish https://www.website.com

    • myExternalizedUrl 結尾為值:

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

  • 若要將具有「作者」網域的路徑外部化:

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

    假設網域對應:

    • author https://author.website.com

    • myExternalizedUrl 結尾為值:

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

  • 要將具有'local'域的路徑外部化:

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

    假設網域對應:

    • local https://publish-3.internal

    • myExternalizedUrl 結尾為值:

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

秘訣

您可以在Javadocs中找到更多範例。

本頁內容