设置多个网站或商店
您可以将Adobe Commerce配置为拥有多个网站或商店,例如英语商店、法语商店和德语商店。 查看了解网站、商店和商店视图。
设置多个商店的过程取决于您选择使用唯一域还是共享域。
具有唯一域的多个商店:
https://first.store.com/
https://second.store.com/
具有相同域的多个商店:
https://store.com/first/
https://store.com/second/
添加域
自定义域可以添加到Pro Staging和任何生产环境;它们无法添加到集成环境。
添加域的过程取决于云帐户的类型:
-
用于Pro暂存和生产
向Fastly添加新域,请参阅管理域,或打开支持票证以请求帮助。 此外,您必须提交Adobe Commerce支持票证以请求将新域添加到群集。
-
仅用于入门级生产
将新域添加到Fastly,请参阅管理域或提交Adobe Commerce支持票证以请求帮助。 此外,您必须将新域添加到Cloud Console中的 域 选项卡:
https://<zone>.magento.cloud/projects/<project-ID>/edit
配置本地安装
若要将本地安装配置为使用多个商店,请参阅 配置指南 中的多个网站或商店。
在成功创建和测试本地安装以使用多个存储区后,必须准备集成环境:
Pro环境的配置更新
routes.yaml
文件中的路由配置和.magento.app.yaml
文件中的cron配置。 Adobe建议在集成环境中更新和测试YAML配置文件,然后将更改部署到暂存环境。 如果重新部署后更改未应用于暂存站点,并且日志中没有相关错误消息,则您 必须 提交描述尝试的配置更改的Adobe Commerce支持票证。 在票证中包含任何更新的YAML配置文件。为不同的域配置路由
路由定义如何处理传入URL。 多个具有唯一域的存储区要求您定义routes.yaml
文件中的每个域。 配置路由的方式取决于您希望站点的运行方式。
要在集成环境中配置路由:
-
在本地工作站上,在文本编辑器中打开
.magento/routes.yaml
文件。 -
定义域和子域。
mymagento
上游值与.magento.app.yaml
文件中的name属性值相同。code language-yaml "http://{default}/": type: upstream upstream: "mymagento:http" "http://<second-site>.{default}/": type: upstream upstream: "mymagento:http"
-
将更改保存到
routes.yaml
文件。 -
继续设置网站、商店和商店视图。
为共享域配置位置
在路由配置定义如何处理URL的情况下,.magento.app.yaml
文件中的web
属性定义应用程序向Web公开的方式。 Web 位置 允许传入请求的更多粒度。 例如,如果您的域是store.com
,则可以使用/first
(默认站点)和/second
来请求共享域的两个不同存储。
要配置新的Web位置:
-
为根(
/
)创建别名。 在此示例中,第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 ...
-
为网站(
/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 ...
要使用其他目录配置位置:
-
为根(
/
)和静态(/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"
-
在
pub
目录下为网站创建子目录:pub/<website>
-
将
pub/index.php
文件复制到pub/<website>
目录中并更新bootstrap
路径(/../../app/bootstrap.php
)。code language-none try { require __DIR__ . '/../../app/bootstrap.php'; } catch (\Exception $e) {
-
为
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 ...
-
提交并推送更改的文件。
pub/<website>/index.php
(如果此文件位于.gitignore
中,则推送可能需要强制选项。).magento.app.yaml
设置网站、商店和商店视图
在 管理UI 中,设置您的Adobe Commerce 网站、商店 和 商店视图。 请参阅 配置指南 的“管理员”🔗中的设置多个网站、商店和商店视图。
设置本地安装时,请务必使用管理员提供的网站、商店和商店视图的相同名称和代码。 更新magento-vars.php
文件时需要这些值。
修改变量
请使用项目根目录中的magento-vars.php
文件传递MAGE_RUN_CODE
和MAGE_RUN_TYPE
变量,而不是配置NGINX虚拟主机。
要使用magento-vars.php
文件传递变量:
-
在文本编辑器中打开
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; }
-
移动评论的
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"; }
-
替换
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; }
-
-
将更改保存到
magento-vars.php
文件。
在集成服务器上部署和测试
在云基础架构集成环境中将更改推送到Adobe Commerce并测试您的站点。
-
添加、提交代码更改并将其推送到远程分支。
code language-bash git add -A && git commit -m "Implement multiple sites" && git push origin <branch-name>
-
等待部署完成。
-
部署后,在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/
-
彻底测试您的网站,并将代码合并到
integration
分支以供进一步部署。
部署到暂存和生产环境
执行部署到暂存和生产环境的部署过程。 对于入门和专业版环境,您可以使用Cloud Console跨环境推送代码。
Adobe建议先在暂存环境中进行全面测试,然后再推送到“生产”环境。 在集成环境中更改代码,然后再次开始跨环境部署的流程。