Chcielibyśmy stworzyć wiele stron internetowych w Magento 2. W oficjalnej dokumentacji Magento 2 znajduje się artykuł na ten temat , ale sposób, w jaki opisują, nie jest odpowiedni w naszym przypadku.
Sugerują użycie subdomen w celu ustalenia różnych stron internetowych, takich jak
- website1 .magento-site.com
- website2 .magento-site.com
Chcielibyśmy używać podfolderów zamiast subdomen . Dać przykład,
- magento-site.com/ website1
- magento-site.com/ website2
Jak możemy rozwiązać ten problem na serwerze Nginx?
Moja konfiguracja
Używam Ubuntu 16.04. Zainstalowałem Nginx i nie zmieniłem żadnej konfiguracji rdzenia Nginx. Utworzyłem plik w magento-site.com.conf
środku /etc/nginx/sites-enabled/magento-site.com.conf
.
/etc/nginx/sites-enabled/magento-site.com.conf
server {
listen 8080;
server_name magento-site.com;
set $MAGE_RUN_CODE website1;
set $MAGE_ROOT /var/www/magento-site.com;
include /var/www/magento-site.com/nginx.conf;
}
EDYCJA 1: (2017-10-23)
Mam wiele sklepów dla każdej strony internetowej.
magento2
nginx
multi-website
Bunyamin Inan
źródło
źródło
Odpowiedzi:
Próbowałem wielu sposobów, aby osiągnąć to zadanie. Chciałbym podziękować @ matias-hidalgo za jego wkład, chociaż nie rozumiałem jego odpowiedzi przy pierwszym czytaniu :).
Oto scenariusz. Mamy dwie różne witryny i każda z nich ma dwa różne widoki sklepu, jak następuje:
Strona internetowa 1
Strona internetowa 2
W moim rozwiązaniu zamierzamy zmienić konfigurację w Magento Admin . Następnie utworzymy niektóre podfoldery , a na koniec zmodyfikujemy
nginx.conf
.Przede wszystkim musimy wprowadzić zmiany w konfiguracji w Magento Admin . Przejdź do
Stores
->Configuration
->General
->Web
. Musimy zmienić podstawowe adresy URL dla każdego widoku sklepu.Dla domyślnej konfiguracji
Podaj następującą konfigurację dla konfiguracji domyślnej.
Dla witryny 1 (e-commerce) i witryny 1 (Venda Assistida)
Podaj następującą konfigurację dla wszystkich widoków sklepu Witryny 1 .
Dla witryny 2 (e-commerce) i witryny 2 (Venda Assistida)
Podaj następującą konfigurację dla wszystkich widoków sklepu Witryny 2 .
Po drugie, musimy utworzyć
website1
iwebsite2
foldery w/pub
katalogu. Ostatecznie powinieneś mieć następujące foldery:MAGENTO_ROOT/pub/website1
MAGENTO_ROOT/pub/website2
Skopiuj
pub/index.php
plik do tych katalogów. Następnie wprowadzimy zmiany wMAGENTO_ROOT/pub/website1/index.php
iMAGENTO_ROOT/pub/website2/index.php
.Zadowolony z
MAGENTO_ROOT/pub/website1/index.php
Zmieniłem tylko 3 linie:
1. linia:
require __DIR__ . '/../../app/bootstrap.php';
2. linia:
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website1';
3. linia:
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
W celu ostatecznego ulepszenia musimy zmodyfikować
nginx.conf
w katalogu MAGENTO_ROOT. Wprowadź następującą konfigurację do swojegonginx.conf
.Po wszystkich tych konfiguracjach i modyfikacjach będziesz mógł używać stron internetowych jako podfolderów. Mam nadzieję, że to pomoże.
źródło
W konfiguracji Nginx możesz użyć tej przykładowej konfiguracji:
i użyj tego index.php jako przykładu:
W celu wyjaśnienia:
W mojej konfiguracji vgin nginx znajdziesz:
gdzie pierwszy „/ twój / podfolder” można zmienić dla dowolnego adresu URL witryny. np. www.mywebsite.com/stack/magento -> / stack / magento
Następnie, aby zdefiniować kod strony, który zostanie załadowany do tego adresu URL, musisz utworzyć index.php, pisząc kod strony tutaj:
Mam nadzieję, że teraz jest to wystarczająco jasne, muszę poświęcić czas na projekt, aby to zrobić, więc wiem, że to działa i jest bliżej, jak to robiliśmy na M1.
źródło
w domenie.conf w pliku „etc / nginx” musisz utworzyć mapę.
na przykład:
lub
źródło
website1.magento-site.com
, ale chcęmagento-site.com/website1
.map $http_host$uri $MAGE_RUN_CODE
Co powiesz na czyste rozwiązanie Nginx z tą podwójną mapą?
Najpierw za stronę internetową (dzięki @MagenX)
Sekundę dla nowego uri żądania
I na koniec, nie zapomnij ustawić nowego obliczonego REQUEST_URI
źródło