M2支持多网站(
website)多网店(store)多视图(store view)。
关于这3者区别 请看官方介绍:
https://docs.magento.com/m2/ce/user_guide/stores/websites-stores-views.html
比如我有2个网店,中文站和英文站
2个网站的分类和产品基本一样,只是翻译不同。
如果只是翻译不同的话 可以用一个store+多store view。
- 英文站(默认站) -> magento2demo.texiaoyao.cm
- 中文站 -> magento2demo-zh.texiaoyao.cn
注意:magento2demo-zh.texiaoyao.cn需要先域名解析
创建中文store view





好的,创建完成后,我们就去configuration页面设置域名
设置中文站


选择中文,点击确定
把国家设为中国,语言设为中文


保存,点击右上角的'Save Config'
设置域名


保存,点击右上角的'Save Config'
前台测试

可以看到 前台可以直接切换到中文站

见鬼了,发现打不开。
别慌,这是因为你没有在nginx里配置。
Nginx虚拟主机里增加域名
好吧。我们继续到服务器里配置nginx的虚拟主机。
这个稍微有点复杂,仔细看。
还记得之前我们是怎么配置的吗?
之前在 /etc/nginx/sites-enabled/magento2里
我们继续编辑该文件
改成
upstream fastcgi_backend {
server unix:/run/php/php7.0-fpm.sock;
}
map $http_host $MAGE_RUN_CODE {
magento2demo.texiaoyao.cn default;
magento2demo-zh.texiaoyao.cn cn;
}
server {
listen 80;
server_name magento2demo.texiaoyao.cn;
set $MAGE_ROOT /var/www/magento2;
set $MAGE_MODE developer;
set $MAGE_RUN_TYPE store;
include /var/www/magento2/nginx.conf.sample;
error_log /var/log/magento2/nginx/error.log;
}
server {
listen 80;
server_name magento2demo-zh.texiaoyao.cn;
set $MAGE_ROOT /var/www/magento2;
set $MAGE_MODE developer;
set $MAGE_RUN_TYPE store;
include /var/www/magento2/nginx.conf.sample;
error_log /var/log/magento2/nginx/error.log;
}

保存。
这里东西有点多,我一个个解释:
- 分了2个server。因为同时加在一个server里会有bug,在访问
http://magento2demo-zh.texiaoyao.cn的时候 会跳转到默认的http://magento2demo.texiaoyao.cn里去。 - 加了
map $http_host $MAGE_RUN_CODE来给每个域名指定一个$MAGE_RUN_CODE,这个$MAGE_RUN_CODE就是m2后台创建store view的时候设置的Code标识符。通过这个Code标识符我们才能找到这个store view。 - 加了
set $MAGE_RUN_TYPE store,因为我们的域名是设置的store view,是属于store的,所以MAGE_RUN_TYPE是store。如果我们的域名是设置的store,store是属于website的,那么MAGE_RUN_TYPE就是website
还需要改下/var/www/magento2/nginx.conf.sample文件。
vim /var/www/magento2/nginx.conf.sample
把
location ~ (index|get|static|report|404|503|health_check)\.php$ {
try_files $uri =404;
fastcgi_pass fastcgi_backend;
fastcgi_buffers 1024 4k;
fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
fastcgi_param PHP_VALUE "memory_limit=756M \n max_execution_time=18000";
fastcgi_read_timeout 600s;
fastcgi_connect_timeout 600s;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
改成
location ~ (index|get|static|report|404|503|health_check)\.php$ {
try_files $uri =404;
fastcgi_pass fastcgi_backend;
fastcgi_buffers 1024 4k;
fastcgi_param PHP_FLAG "session.auto_start=off \n suhosin.session.cryptua=off";
fastcgi_param PHP_VALUE "memory_limit=756M \n max_execution_time=18000";
fastcgi_read_timeout 600s;
fastcgi_connect_timeout 600s;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# START - Multisite customization
fastcgi_param MAGE_RUN_TYPE $MAGE_RUN_TYPE;
fastcgi_param MAGE_RUN_CODE $MAGE_RUN_CODE;
fastcgi_param MAGE_MODE $MAGE_MODE;
# END - Multisite customization
include fastcgi_params;
}
主要加入了MAGE_RUN_TYPE和MAGE_RUN_CODE变量。
保存。
最后重启nginx和php7.0-fpm
sudo systemctl restart nginx
sudo systemctl restart php7.0-fpm
再浏览器访问http://magento2demo-zh.texiaoyao.cn
发现ok了。
妈蛋,怎么不是中文的?这还是显示的英文啊。
嗯,是的,m2自身不带中文语言包,需要我们自己安装。
好吧,请继续。
安装中文语言包
ssh登入服务器。
参考
https://github.com/zouhongzhao/magento2_zh_hans_cn
composer require zouhongzhao/magento2_zh_hans_cn:dev-master
或者用老外做的中文包
composer require mageplaza/magento-2-chinese-language-pack:dev-master
如果很慢的话,可以执行下面的语句
wget https://github.com/zouhongzhao/magento2_zh_hans_cn/archive/master.zip
mkdir -p app/i18n/Zouhongzhao
mv master.zip app/i18n/Zouhongzhao/
cd app/i18n/Zouhongzhao/
unzip master.zip
rm master.zip -rf
mv magento2_zh_hans_cn-master zh_Hans_CN
cd ../../../
php bin/magento i18n:pack -m replace /var/www/magento2/app/i18n/Zouhongzhao/zh_Hans_CN/zh_Hans_CN.csv -d zh_Hans_CN

最后更新下系统
rm -rf var/di/* && rm -rf var/generation/* && rm -rf var/cache/* && rm -rf var/page_cache/* && rm -rf var/view_preprocessed/* && rm -rf pub/static/* && rm -rf generated/* && mkdir var/di
php bin/magento setup:upgrade && php bin/magento setup:di:compile
php bin/magento setup:static-content:deploy en_US zh_Hans_CN -f
php bin/magento indexer:reindex
php bin/magento cache:clean
php bin/magento cache:flush
测试
浏览器刷新下,发现都变成中文了。
如何修改网店的根分类(Root Category)
见
//bbs.mallol.cn/?thread-170.htm
附录
1,Apache下的虚拟主机配置
sudo vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
ServerName magento2demo.texiaoyao.cn
DocumentRoot /var/www/magento2/pub/
SetEnv MAGE_MODE "developer"
</VirtualHost>
<VirtualHost *:80>
ServerName magento2demo-zh.texiaoyao.cn
DocumentRoot /var/www/magento2/pub/
SetEnv MAGE_MODE "developer"
SetEnv MAGE_RUN_CODE "cn"
SetEnv MAGE_RUN_TYPE "store"
</VirtualHost>
保存后,重启apache
CentOS: service httpd restart
Ubuntu: service apache2 restart
2,website级别的多网店多域名怎么配置呢?
我们上面说的是store view级别的多网店多域名配置。
那么website级别的怎么配置呢?
只是操作要麻烦些。
Create Website,设置code,比如我设置为b2c-cnCreate Store,选择website,选择Root Category,设置codeCreate Store View,选择Store,设置code
然后在去后台Configuration配置页面,切换到对应的website,给website设置域名。
最后 在nginx里配置虚拟主机,有点不一样。
要把$MAGE_RUN_TYPE改成website。$MAGE_RUN_CODE要改成Create Website里设置的code.
map $http_host $MAGE_RUN_CODE {
magento2demo.texiaoyao.cn base;
magento2demo-zh.texiaoyao.cn b2c-cn;
}
server {
listen 80;
server_name magento2demo.texiaoyao.cn;
set $MAGE_ROOT /var/www/magento2;
set $MAGE_MODE developer;
set $MAGE_RUN_TYPE website;
include /var/www/magento2/nginx.conf.sample;
error_log /var/log/magento2/nginx/error.log;
}
server {
listen 80;
server_name magento2demo-zh.texiaoyao.cn;
set $MAGE_ROOT /var/www/magento2;
set $MAGE_MODE developer;
set $MAGE_RUN_TYPE website;
include /var/www/magento2/nginx.conf.sample;
error_log /var/log/magento2/nginx/error.log;
}
最后重启下nginx就行了。
Magento2多站点配置指南

本文详细介绍如何在Magento2中配置多网站、多网店及多视图,包括创建中文站和英文站的具体步骤,从storeview设置到Nginx虚拟主机配置,再到中文语言包的安装,以及解决常见问题的方法。
1157

被折叠的 条评论
为什么被折叠?



