设置多个网站或商店

您可以将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属性定义应用程序向Web公开的方式。 Web 位置 ​允许传入请求的更多粒度。 例如,如果您的域是store.com,则可以使用/first (默认站点)和/second来请求共享域的两个不同存储。

要配置新的Web位置

  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 网站商店 ​和​ 商店视图。 请参阅​ 配置指南 ​的“管理员”🔗中的设置多个网站、商店和商店视图。

设置本地安装时,请务必使用管理员提供的网站、商店和商店视图的相同名称和代码。 更新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. 部署后,在Web浏览器中打开您的商店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分支以供进一步部署。

部署到暂存和生产环境

执行部署到暂存和生产环境的部署过程。 对于入门和专业版环境,您可以使用Cloud Console跨环境推送代码。

Adobe建议先在暂存环境中进行全面测试,然后再推送到“生产”环境。 在集成环境中更改代码,然后再次开始跨环境部署的流程。

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