設定多個網站或商店

您可以將Adobe Commerce設定為擁有多個網站或商店,例如英文商店、法文商店和德文商店。 請參閱瞭解網站、商店和商店檢視

WARNING
目錄資料會隨著您增加網站和商店的數量而擴展。 根據您的專案架構,其他存放區可能會導致非快取型目錄頁面的索引程式較長且回應時間較慢。 Adobe建議您密切監視網站效能。

設定多個存放區的程式取決於您選擇使用唯一或共用網域。

具有唯一網域的多家商店:

https://first.store.com/
https://second.store.com/

具有相同網域的多個商店:

https://store.com/first/
https://store.com/second/
TIP
若要將商店檢視新增至網站基底URL,您不必建立多個目錄。 請參閱​_組態指南_​中的將存放區程式碼新增至基底URL

新增網域

自訂網域可以新增到Pro Staging和任何生產環境;它們無法新增到整合環境。

新增網域的程式取決於雲端帳戶的型別:

  • 適用於Pro測試與生產

    將新網域新增到Fastly,請參閱管理網域,或開啟支援票證以請求協助。 此外,您必須提交Adobe Commerce支援票證,才能要求將新網域新增至叢集。

  • 僅供入門級生產使用

    新增網域至Fastly,請參閱管理網域,或提交Adobe Commerce支援票證以要求協助。 此外,您必須新增網域至Cloud Console中的​ 網域 ​索引標籤: https://<zone>.magento.cloud/projects/<project-ID>/edit

設定本機安裝

若要設定本機安裝以使用多個商店,請參閱​ 設定指南 ​中的多個網站或商店

成功建立並測試本機安裝以使用多個存放區後,您必須準備整合環境:

  1. 設定路由或位置 — 指定Adobe Commerce處理傳入URL的方式

  2. 設定網站、商店和商店檢視 — 使用Adobe Commerce管理UI設定

  3. 修改變數 — 在magento-vars.php檔案中指定MAGE_RUN_TYPEMAGE_RUN_CODE變數的值

  4. 部署和測試環境 — 部署和測試integration分支

TIP
您可以使用本機環境來設定多個網站或商店。 請參閱Cloud Docker指示,以設定多個網站或商店

Pro環境的設定更新

WARNING
有些​ Pro專案 ​需要支援票證,才能更新routes.yaml檔案中的路由設定和.magento.app.yaml檔案中的cron設定。 Adobe建議您在整合環境中更新及測試YAML設定檔,然後將變更部署至測試環境。 如果您在重新部署後未將變更套用至測試網站,且記錄檔中沒有相關的錯誤訊息,則您​ 必須 提交說明嘗試的組態變更的Adobe Commerce支援票證。 在票證中包含任何更新的YAML設定檔案。

設定不同網域的路由

路由會定義如何處理傳入的URL。 多個具有唯一網域的存放區需要您定義routes.yaml檔案中的每個網域。 您設定路由的方式取決於您想要的網站運作方式。

若要在整合環境中設定路由

  1. 在本機工作站上,以文字編輯器開啟.magento/routes.yaml檔案。

  2. 定義網域和子網域。 mymagento上游值與.magento.app.yaml檔案中的name屬性值相同。

    code language-yaml
    "http://{default}/":
        type: upstream
        upstream: "mymagento:http"
    
    "http://<second-site>.{default}/":
        type: upstream
        upstream: "mymagento:http"
    
  3. 將變更儲存至routes.yaml檔案。

  4. 繼續設定網站、商店和商店檢視

設定共用網域的位置

路由設定會定義如何處理URL,.magento.app.yaml檔案中的web屬性會定義您的應用程式如何公開至網路。 網頁​ 位置 ​允許傳入要求的詳細程度。 例如,如果您的網域是store.com,您可以針對共用網域的兩個不同存放區之要求,使用/first (預設網站)和/second

若要設定新的網站位置

  1. 為根(/)建立別名。 在此範例中,第3行的別名為&app

    code language-yaml
    web:
        locations:
            "/": &app
                # The public directory of the app, relative to its root.
                root: "pub"
                passthru: "/index.php"
                index:
                - index.php
                ...
    
  2. 為網站(/website)建立傳遞,並使用上一步驟中的別名來參照根目錄。

    別名可讓website從根位置存取值。 在此範例中,網站passthru在第21行上。

    code language-yaml
    web:
        locations:
            "/": &app
                # The public directory of the app, relative to its root.
                root: "pub"
                passthru: "/index.php"
                index:
                - index.php
                ...
            "/media":
                root: "pub/media"
                ...
            "/static":
                root: "pub/static"
                allow: true
                scripts: false
                passthru: "/front-static.php"
                rules:
                    ^/static/version\d+/(?<resource>.*)$:
                        passthru: "/static/$resource"
            "/<website>": *app
              ...
    

若要使用不同的目錄設定位置

  1. 為根(/)和靜態(/static)位置建立別名。

    code language-yaml
    web:
        locations:
            "/": &root
                # The public directory of the app, relative to its root.
                root: "pub"
                passthru: "/index.php"
                index:
                - index.php
                ...
            "/static": &static
                root: "pub/static"
    
  2. pub目錄下建立網站的子目錄: pub/<website>

  3. pub/index.php檔案複製到pub/<website>目錄中並更新bootstrap路徑(/../../app/bootstrap.php)。

    code language-none
    try {
        require __DIR__ . '/../../app/bootstrap.php';
    } catch (\Exception $e) {
    
  4. index.php檔案建立傳遞。

    code language-yaml
    web:
        locations:
            "/": &root
                # The public directory of the app, relative to its root.
                root: "pub"
                passthru: "/index.php"
                index:
                - index.php
                ...
            "/media":
                root: "pub/media"
                ...
            "/static": &static
                root: "pub/static"
                allow: true
                scripts: false
                passthru: "/front-static.php"
                rules:
                    ^/static/version\d+/(?<resource>.*)$:
                        passthru: "/static/$resource"
            "/<website>":
                <<: *root
                passthru: "<website>/index.php"
            "/<website>/static": *static
              ...
    
  5. 提交並推送已變更的檔案。

    • pub/<website>/index.php (如果此檔案位於.gitignore,則推送可能需要強制選項。)
    • .magento.app.yaml

設定網站、商店和商店檢視

在​ 管理UI ​中,設定您的Adobe Commerce 網站商店 ​和​ 商店檢視。 請參閱​ 設定指南 ​的Admin🔗中的設定多個網站、商店和商店檢視。

當您設定本機安裝時,請務必使用管理員提供的相同名稱和程式碼,代表您的網站、商店和商店檢視。 更新magento-vars.php檔案時需要這些值。

修改變數

請使用專案根目錄中的magento-vars.php檔案傳遞MAGE_RUN_CODEMAGE_RUN_TYPE變數,而不設定NGINX虛擬主機。

若要使用magento-vars.php檔案傳遞變數

  1. 在文字編輯器中開啟magento-vars.php檔案。

    預設magento-vars.php檔案應該如下所示:

    code language-php
    <?php
    // enable, adjust and copy this code for each store you run
    // Store #0, default one
    //if (isHttpHost("example.com")) {
    //    $_SERVER["MAGE_RUN_CODE"] = "default";
    //    $_SERVER["MAGE_RUN_TYPE"] = "store";
    //}
    function isHttpHost($host)
    {
        if (!isset($_SERVER['HTTP_HOST'])) {
            return false;
        }
        return $_SERVER['HTTP_HOST'] === $host;
    }
    
  2. 移動註解的if區塊,使其位於function區塊的​ 之後 ​且不再註解。

    code language-php
    <?php
    // enable, adjust and copy this code for each store you run
    // Store #0, default one
    
    function isHttpHost($host)
    {
        if (!isset($_SERVER['HTTP_HOST'])) {
            return false;
        }
        return $_SERVER['HTTP_HOST'] ===  $host;
    }
    
    if (isHttpHost("example.com")) {
        $_SERVER["MAGE_RUN_CODE"] = "default";
        $_SERVER["MAGE_RUN_TYPE"] = "store";
    }
    
  3. 取代if (isHttpHost("example.com"))區塊中的下列值:

    • example.com — 使用您​ 網站 ​的基本URL

    • default — 具有您​ 網站 ​或​ 商店檢視 ​的唯一代碼

    • store — 使用下列其中一個值:

      • website — 載入店面中的​ 網站
      • store — 在店面中載入​ 商店檢視

    針對使用唯一網域的多個網站:

    code language-php
    <?php
    function isHttpHost($host)
    {
        if (!isset($_SERVER['HTTP_HOST'])) {
        return false;
        }
        return $_SERVER['HTTP_HOST'] ===  $host;
    }
    
    if (isHttpHost("second.store.com")) {
        $_SERVER["MAGE_RUN_CODE"] = "<second-site>";
        $_SERVER["MAGE_RUN_TYPE"] = "website";
    }elseif (isHttpHost("store.com")){
        $_SERVER["MAGE_RUN_CODE"] = "base";
        $_SERVER["MAGE_RUN_TYPE"] = "website";
    }
    

    對於具有相同網域的多個網站,您必須檢查​ 主機 ​和​ URI

    code language-php
    <?php
    function isHttpHost($host)
    {
        if (!isset($_SERVER['HTTP_HOST'])) {
        return false;
        }
        return $_SERVER['HTTP_HOST'] ===  $host;
    }
    
    if (isHttpHost("store.com")) {
       $code = "base";
       $type = "website";
    
       $uri = explode('/', $_SERVER['REQUEST_URI']);
       if (isset($uri[1]) && $uri[1] == 'second') {
         $code = '<second-site>';
         $type = 'website';
       }
       $_SERVER["MAGE_RUN_CODE"] = $code;
       $_SERVER["MAGE_RUN_TYPE"] = $type;
    }
    
  4. 將變更儲存至magento-vars.php檔案。

在整合伺服器上部署和測試

在雲端基礎結構整合環境中將變更推送至您的Adobe Commerce,並測試您的網站。

  1. 新增、提交程式碼變更並將其推播至遠端分支。

    code language-bash
    git add -A && git commit -m "Implement multiple sites" && git push origin <branch-name>
    
  2. 等待部署完成。

  3. 部署後,在網頁瀏覽器中開啟您的商店URL。

    具有唯一網域,請使用格式: http://<magento-run-code>.<site-URL>

    例如, http://french.master-name-projectID.us.magentosite.cloud/

    在共用網域中,使用格式: http://<site-URL>/<magento-run-code>

    例如, http://master-name-projectID.us.magentosite.cloud/french/

  4. 徹底測試您的網站,並將程式碼合併至integration分支以進行進一步部署。

部署至測試與生產

執行部署至中繼及生產環境的部署程式。 對於入門和Pro環境,您可使用Cloud Console跨環境推送程式碼。

Adobe建議先在中繼環境中進行全面測試,然後再推送至生產環境。 在整合環境中變更程式碼,然後再次開始跨環境部署的程式。

recommendation-more-help
05f2f56e-ac5d-4931-8cdb-764e60e16f26