Различные виды магазина или веб-сайты в подпапках

29

Клиент хочет, чтобы его магазин был настроен следующим образом:

Это пример, но может быть много разных подпапок. Каков наилучший подход для работы с разными подпапками для разных просмотров магазина / веб-сайтов?

Я знаю, что одним из решений является создание подпапок, называемых deи enт. Д., И копирование index.php и .htaccess в соответствующие подпапки.

Также могут быть некоторые обходные пути (символические ссылки для index.php, конфигурация vHost вместо использования .htaccess), чтобы минимизировать дублирование файлов, но я хотел бы найти решение, где мне не нужно вносить какие-либо изменения в файловую систему, а просто обрабатывать все по конфигурации.


ОБНОВИТЬ

Благодаря поддержке Enterprise мы убедились, что лучший способ сделать это - создать подпапки.

В итоге мы сделали это так:

  • Создайте каталог "languagefolders"
  • Создал копию index.php внутри каталога вместе с настроенным .htaccess и символическими ссылками на папки Magento (app /, errors /, ...)
  • Созданы символические ссылки "de", "en" и т. Д. Внутри корневого каталога Magento, указывающие на каталог "languagefolders"

Таким образом, мы можем добавить новый язык, создав новую символическую ссылку (например, «fr»).

Матиас Цейс
источник
Мы сделали это только для того, чтобы найти, что веб-сайт не может найти какой-либо продукт или категорию (Magento 404 / нет маршрута на страницу). Вы с этим тоже сталкивались?
snh_nl
Не так, как я помню, извини. Вы заново создали все индексы?
Матиас Цейс
Мы используем nginx, и для его работы необходимо обновление. Я
обновлю
Еще 2 странные вещи. 1) / checkout возвращает 404 и 2) средство выбора языка: если я нажимаю на английский, затем снова нажимаю на английский, и мы видим, что uri продолжает добавлять / en / en / en / etc .... что вы выбрали в качестве базового url? domain.com/en или диди, вы сохраняете это как
domain.com
Мы выбрали domain.com/en/.
Матиас Цейс

Ответы:

18

Очень легко обслуживать несколько доменов / путей на основе URL. Как уже упоминалось, самая простая настройка (только для конфигурации) возможна, когда уникальные core/storeкоды могут использоваться в пути в качестве подпапок . Это требует одного из следующих:

  1. Посетители изначально связаны с правильным путем к вложенной папке
  2. Посетителям предоставляется целевая страница, с которой они выбирают свой магазин и получают печенье
  3. Какой-то механизм используется для установки типа запуска и кода запуска до того, как PHP обработает ответ

Что касается # 3: начиная с версии 1.4 Magento, стало возможным позволить веб-серверу определять работающий контекст ( веб-сайт или магазин ), а также конкретный код, который следует использовать. Из index.php :

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

Принимая во внимание, что переменные среды используются для инициализации приложения, возможно влияние на систему до того, как PHP даже раскрутится. С помощью Apache mod_rewriteэто можно сделать для подпапок с небольшим количеством хитрости:

RewriteCond %{REQUEST_URI} ^/de/$
RewriteRule .* - [E=MAGE_RUN_CODE:deutsch]
RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
RewriteRule .* - [E=MAGE_RUN_CODE:%1]

Apache дергается с переменными окружения и подпапками, как показывает этот превосходный ответ SO . Первые две строки приводят к тому $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';, что последние две строки обеспечивают необходимое $_SERVER["MAGE_RUN_CODE"] = 'deutsch';. Есть множество других трюков, но вышесказанное укусило меня раньше.

Конечной целью должно быть начальное обнаружение, насколько это разумно (geoip + многоязычность), при этом пользователь должен установить cookie-файл хранилища, который можно использовать для обхода / пошагового прохождения логики в последующих запросах.

benmarks
источник
1
Спасибо, Бен. Делая это таким образом, я могу инициализировать представления магазина, но я всегда получаю страницу Magento 404 («К сожалению, наши плохие»). Я установил базовый URL для domain1.org/en , domain.org/de и так далее. URL-адрес обложки, медиа-URL и т. Д. Установлены на обложки, domain.org/ (skin | media | ...). Обратите внимание, что правильные страницы возвращаются, если я использую обычный подход «copy index.php and .htaccess».
Матиас Зейс
Я принял этот ответ, так как он ближе всего подходит к тому, что мы пытались выполнить (даже если мы решили его немного по-другому для наших особых требований).
Матиас Цейс
Удивительно, что параметр «Добавить код магазина в URL» не работает.
отметки
Коды магазина должны быть уникальными. Как это должно работать с несколькими представлениями магазина, заканчивающимися на de /, fr / или en /?
Матиас Цейс
Я думаю, что я пропустил реплицированные коды магазина, хотя я думаю, что предполагал некоторую перезапись на основе веб-сервера (например, mode_rewrite ), основанное на HTTP_HOST+
подпапке
9

Если URL-адреса (подпапки) с отступом могут иметь то же имя, что и коды магазинов (почему нет?), Вы можете просто включить их Configuration > Web > Url options > Add Store Code to Urls.

Alex
источник
Правильно, тогда вам даже не понадобятся подпапки. Пока перезапись URL включена, Magento будет знать, что «en» является кодом магазина, и не будет искать подпапку.
Пол Григорута
8
Проблема с этим решением состоит в том, что Magento допускает только один код магазина «de» в установке Magento. Поэтому, если у вас есть несколько веб-сайтов с одинаковыми языками, вы должны использовать разные коды магазина, например, de_de, de_en, ...
therouv
2
Рувен получил это. Проблема в том, что вы не можете иметь несколько магазинов с одинаковым кодом магазина.
Анна Фёлькл
Да, проблема в том, что, как сказал Рувен, у вас не может быть двух представлений магазина, использующих один и тот же код магазина.
Матиас Зейс
Я подтверждаю, что Рувен понял это правильно. Magento сообщили об ошибке. Потому что в этих современных средах с большим количеством магазинов это должно работать. Тем не менее, как вы думаете, можно ли сделать настройку параметра просмотра Add store codes to urlмагазина? magento.stackexchange.com/questions/60686/… = предположим, что там 1 мультимагазин с доменами sep, другой использует / en и / fr
snh_nl
3

в итоге мы сделали именно это

Благодаря поддержке Enterprise мы убедились, что лучший способ сделать это - создать подпапки.

В итоге мы сделали это так:

  • Создайте каталог "languagefolders"
  • Создал копию index.php внутри каталога вместе с настроенным .htaccess и символическими ссылками на папки Magento (app /, errors /, ...)
  • Созданы символические ссылки "de", "en" и т. Д. Внутри корневого каталога Magento, указывающие на каталог "languagefolders"

Таким образом, мы можем добавить новый язык, создав новую символическую ссылку (например, «fr»).

В бэкэнде мы установили магазин base urlнаdomain.com/en

Если вы используете nginx, для обработки вашего местоположения необходимо обновление, чтобы обработать index.php также в новой подпапке. Это должно быть сделано для каждой новой папки перевода

snh_nl
источник
snh_nl Есть ли шанс, что вы объясните, что означают ваши последние 2 строки? У меня та же проблема, о которой вы говорили ранее, но я не могу понять: если вы используете nginx, для обработки вашего местоположения необходимо обновление, чтобы обработать index.php также в новой подпапке. Это необходимо сделать для каждой новой папки перевода. Я использую nginx и пытаюсь сделать то же самое. Спасибо
vbak
location @rewrite { rewrite /(../)? /$1index.php; }
snh_nl
2

В официальной базе знаний Magento есть запись которая описывает именно это.

Если вы работаете с Apache, убедитесь, что все записи Виртуального хоста (для каждого домена) указывают на тот же корень документа, где находится ваша установка Magento. Это для нескольких доменов.

Следующая (и последняя) вещь - это .htaccess в той же папке установки Magento. .htaccess - это мощный файл конфигурации на уровне каталогов, в котором вы можете устанавливать правила-действия для каждого запроса к серверу. Таким образом, вам нужно будет обработать все различные (под) домены / действия с папками и установить правильные переменные сервера, которые Magento использует на этапе инициализации.

После того, как вы закончите настройку сервера, вам нужно будет установить разные базовые пути для каждого магазина в администраторе Magento (система - конфигурация - общие сведения - сеть).

Поэтому убедитесь, что вы следуете официальному руководству (которое также является предпочтительным способом), и все должно работать гладко.

Jernej Golja
источник
1
Вопрос был не о нескольких доменах.
Фабиан Шменглер
Вопрос был о настройке нескольких магазинов с несколькими доменами (.org и .ch - разные домены). Однако это не имеет значения, поскольку предоставленный ответ описывает решение для настройки нескольких магазинов независимо от того, есть ли у вас несколько доменов, поддоменов или просто разные подпапки для каждого из ваших магазинов.
Jernej Golja
1
Но основное внимание было уделено путям для представлений магазина, это не казалось, что домены были проблемой. Во всяком случае, после вашего редактирования я изменил свой голос.
Фабиан Шменглер
1
Точно, проблема не в том, что нужно использовать несколько доменов, а в том, что несколько магазинов должны использовать один и тот же путь / «подпапку», что невозможно при добавлении кодов магазинов в URL.
Матиас Зейс
-2

Сначала вы должны выполнить некоторую настройку в админ-панели Magento, затем создать подкаталог и переместить index.php и .htaccess в подкаталог и внести некоторые незначительные изменения в index.php.

Вот полный пример того, как это сделать.

s-охотник
источник