The first thing we need to do when setting up a vanilla Magento 2 website is define our website, store, and store view structure.
So what is the difference between website, store, and store view, and why is it important?
noindex
and nofollow
), and so on. The option where we use the Base Link URL, for example, (yourdomain.com/myhiddenpage
) is easy to set up.The website, store, and store view structure is shown in the following image:
To step through this recipe, you will use a Droplet created in Chapter 2, Magento 2 System Tools, at DigitalOcean (https://www.digitalocean.com/). We will be using an NGINX, PHP-FPM, Composer-based setup with Magento 2 preinstalled. No other prerequisites are required.
For the purpose of this recipe, let's assume that we need to create a multi-website setup including three domains (yourdomain.com
, yourdomain.de
, and yourdomain.fr
) and separated Root Catalogs. The following steps will guide you through this:
Go to /etc/nginx/conf.d
, open the default.conf
file, and include the following content at the top of your file:
map $http_host $magecode { hostnames; default base; yourdomain.de de; yourdomain.fr fr; }
map $http_host $magecode { hostnames; default base; yourdomain.de de; yourdomain.fr fr; } upstream fastcgi_backend { server 127.0.0.1:9000; } server { listen 80; listen 443 ssl http2; server_name yourdomain.com; set $MAGE_ROOT /var/www/html; set $MAGE_MODE developer; ssl_certificate /etc/ssl/yourdomain-com.cert; ssl_certificate_key /etc/ssl/yourdomain-com.key; include /var/www/html/nginx.conf.sample; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; location ~ /.ht { deny all; } }
/var/www/html/
and open the nginx.conf.sample
file. Go to the bottom and look for:location ~ (index|get|static|report|404|503).php$
Now we add the following lines to the file under fastcgi_pass fastcgi_backend;
:
fastcgi_param MAGE_RUN_TYPE website; fastcgi_param MAGE_RUN_CODE $magecode;
location ~ (index|get|static|report|404|503).php$ { try_files $uri =404; fastcgi_pass fastcgi_backend; fastcgi_param MAGE_RUN_TYPE website; fastcgi_param MAGE_RUN_CODE $magecode; fastcgi_param PHP_FLAG "session.auto_start=off suhosin.session.cryptua=off"; fastcgi_param PHP_VALUE "memory_limit=256M max_execution_time=600"; fastcgi_read_timeout 600s; fastcgi_connect_timeout 600s; fastcgi_param MAGE_MODE $MAGE_MODE; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
The current setup uses the MAGE_RUN_TYPE website
variable. You may change website
to store
, depending on your setup preferences. When changing the variable, you need your default.conf
mapping codes as well.
service nginx restart && service php-fpm restart
var/www/html/pub echo "<?php header("Content-type: text/plain"); print_r($_SERVER); ?>" > magecode.php
Don't forget to update your nginx.conf.sample
file with the new magecode
code. It's located on the bottom of your file and should look like this:
location ~ (index|get|static|report|404|503|magecode).php$ {
Restart NGINX and open the file in your browser. The output should look as follows. As you can see, the created MAGE_RUN
variables are available:
Name |
|
Code |
|
Next, click on Create Store and commit the following details:
Website |
|
Name |
|
Root Category |
|
Next, click on Create Store View and commit the following details:
Store |
|
Name |
|
Code |
|
Status |
|
Repeat the same steps for the French domain. Make sure that the Code in Website and Store View is fr
.
Name |
|
Is Active |
|
Page Title |
|
Perform the same steps for the French domain. You may add additional information here but it is not needed. Changing the current Root Category called Default Category to Root English
is also optional but advised.
Save your configuration and go to Stores | All Stores and change all of the stores to the appropriate Root Catalog we just created. Every Root Category should now have a dedicated Root Catalog.
yourdomain.com
, yourdomain.de
, and yourdomain.fr
.Let's recap and find out what we did throughout this recipe. In steps 1 through 11, we created a multi-store setup for .com
, .de
, and .fr
domains using a separate Root Catalog.
In steps 1 through 4, we configured the domain mapping in the NGINX default.conf
file. Then we added the fastcgi_param MAGE_RUN
code to the nginx.conf.sample
file; this will manage which website or store view to request within Magento.
In step 6, we used an easy test method to check if all domains run the correct MAGE_RUN
code.
In steps 7 through 9, we configure the website, store, and store view names and codes for the given domain names.
In step 10, we created additional Root Catalogs for the remaining German and French stores. They are then connected to the previously created store configuration. All stores have their own Root Catalog now.
Are you able to buy additional domain names, but would like to try setting up a multi-store? Here are some tips to create one. Depending on whether you are using Windows, Mac OS, or Linux, the following options apply:
C:WindowsSystem32driversetc
and open up the hosts
file as an administrator. Add the following (change the IP and domain name accordingly):123.456.789.0 yourdomain.de 123.456.789.0 yourdomain.fr 123.456.789.0 www.yourdomain.de 123.456.789.0 www.yourdomain.fr
Save the file and click on the Start button. Search then for cmd.exe
and commit the following:
ipconfig /flushdns
/etc/
directory, open up the hosts
file as a superuser, and add the following (change the IP and domain name accordingly):123.456.789.0 yourdomain.de 123.456.789.0 yourdomain.fr 123.456.789.0 www.yourdomain.de 123.456.789.0 www.yourdomain.fr
Save the file and run the following command on the shell:
dscacheutil -flushcache
Depending on your Mac version, check out the different commands here: http://www.hongkiat.com/blog/how-to-clear-flush-dns-cache-in-os-x-yosemite/
/etc/
directory, open up the hosts
file as a root user, and add the following (change the IP and domain name accordingly):123.456.789.0 yourdomain.de 123.456.789.0 yourdomain.fr 123.456.789.0 www.yourdomain.de 123.456.789.0 www.yourdomain.fr
Save the file and run the following command on the shell:
service nscd restart
Depending on your Linux version, check out the different commands here: http://www.cyberciti.biz/faq/rhel-debian-ubuntu-flush-clear-dns-cache/
Open up your browser and surf to the custom domains.
3.144.37.38