Php 迁移后的多网站、多域设置Magento 2

Php 迁移后的多网站、多域设置Magento 2,php,.htaccess,magento,migration,magento2,Php,.htaccess,Magento,Migration,Magento2,我已将Magento 1商店迁移到Magento 2。除多网站设置外,所有功能均按预期工作。我最初的M1安装包括1个网站和2个商店(不同的域:.nl和.be),它们都有2个商店视图(不同的语言nl和EN,nl和FR)。 我所能找到的所有文档都显示了如何在Magento2中设置网站和存储,以及如何在index.php中更改以在前端获得想要的结果。我的问题是,所有这些文档都提供了显示多个网站的解决方案,但我的设置由一个网站和一个网站代码(“基本”)组成。它也没有解释如何设置第二个域,我应该在索引文件

我已将Magento 1商店迁移到Magento 2。除多网站设置外,所有功能均按预期工作。我最初的M1安装包括1个网站和2个商店(不同的域:.nl和.be),它们都有2个
商店视图
(不同的语言nl和EN,nl和FR)。 我所能找到的所有文档都显示了如何在Magento2中设置网站和存储,以及如何在
index.php
中更改以在前端获得想要的结果。我的问题是,所有这些文档都提供了显示多个网站的解决方案,但我的设置由一个网站和一个网站代码(“基本”)组成。它也没有解释如何设置第二个域,我应该在索引文件中放什么?我想我需要使用存储代码,但是我无法让第二个域工作。主域正在工作(因为它是“基”)

以下是我迄今为止所尝试的:

  • 我已经设置了第二个域,并为app、var、pub和lib的主文件夹创建了
    symlinks

  • 以各种方式在我的网站根目录中编辑
    index.php
    。下面是我尝试过的许多例子中的一个,我展示这一个是因为在我的头脑中应该是这样的

    $params = $_SERVER;
    
    switch($_SERVER['HTTP_HOST']) {
             case 'spijl-in-stijl.be':
             case 'www.spijl-in-stijl.be':
                  $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'spijl-in-stijlbe';
                  $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store';
             break;
             default:
                  $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'base';
                  $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
    }
    
  • 在我的第二个域文件夹中创建并编辑了
    index.php
    。它要么显示403禁止,要么将我重定向到主域

  • 尝试使用存储代码代替网站代码,但出现错误(找不到请求的存储)

  • 试图通过更改第二个存储设置在后端编辑
    storeview
    ,它破坏了整个网站,只能通过编辑数据库中的基本URL来恢复它

  • 在root中编辑了
    .htaccess
    ,在第二个域中添加了一个编辑的
    .htaccess

后端中的设置设置正确。已正确设置所有基本URL。 这一切都归结为同一个理论>如果两个域的网站代码不同,这可能会起作用


我真的希望有人能帮我解决这个问题。

要在多商店模式下运行Magento,您实际上不需要创建多个目录。唯一的例外是,如果您的托管提供商需要为您托管的每个域提供单独的目录,但对于大多数提供商来说,情况并非如此

确保在服务器和magento中完成以下配置以运行多存储

配置基本url:

转到
Magento admin>>存储>>配置
,然后将配置范围切换到相应的存储/网站。然后用相应存储的新url替换现有配置的url。此url将非常有用:

Configure.htaccess:

使用正确的存储代码和域名替换值后,将以下代码添加到webroot中的.htaccess文件中

SetEnvIf Host yourwebsite.com MAGE_RUN_CODE={{YOUR STORE CODE HERE}}
SetEnvIf Host yourwebsite.co.uk MAGE_RUN_TYPE=store
完成上述配置后,可以删除对index.php所做的更改

对.htaccess进行更改也不是很好的做法。您也可以通过在vhost文件中配置它来实现这一点

对于Apache:

<VirtualHost *:80>
            ServerName yourwebsite.com

            DocumentRoot {{Your webroot}}

            <Directory {{Your webroot}}/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
            </Directory>

            SetEnv MAGE_RUN_CODE "store1_code"
            SetEnv MAGE_RUN_TYPE "store"
</VirtualHost>

<VirtualHost *:80>
        ServerName yourwebsite.co.uk

                DocumentRoot {{Your webroot}}

                <Directory {{Your webroot}}/>
                    Options Indexes FollowSymLinks MultiViews
                    AllowOverride All
                </Directory>

                SetEnv MAGE_RUN_CODE "store2_code"
                SetEnv MAGE_RUN_TYPE "store"
</VirtualHost>
注意:上面的示例代码不仅仅适用于复制和粘贴,相反,您需要用网站特定的值替换这些值,并从这里复制必要的配置,并将其放置在网站/web服务器配置的适当部分

server {
    listen 80;
    server_name yourwebsite.com
    set $MAGE_ROOT {{Your webroom}};
    set $MAGE_RUN_CODE = store1_code;
    set $MAGE_RUN_TYPE = store;
}

server {
    listen 80;
    server_name yourwebsite.co.uk
    set $MAGE_ROOT {{Your webroom}};
    set $MAGE_RUN_CODE = store2_code;
    set $MAGE_RUN_TYPE = store;
}