У нас есть Wordpress в корне / в физической подпапке / wp и Magento в /products.
Мы хотим сделать сайты многоязычными, используя подпапки, например, domain.com/en
Проблема возникает, когда magento добавляет код магазина (язык) после URL, поэтому мы имеем
domain.com/en (wordpress)
domain.com/products/en (magento)
Естественно, мы хотели бы
domain.com/en
domain.com/en/products
Теперь очень легко заставить его работать с некоторым правилом перезаписи
RewriteRule ^(.*)/products/?(.*)$ /products/$1 [L]
Но, тем не менее, у нас есть проблема, так как Magento генерирует ссылки как / products / en, можно начать изменять, где эти ссылки генерируются, как в
\Magento\Store\Model\Store
В функции _updatePathUseStoreView это, похоже, не обрабатывает все ссылки, хотя
В общем, кажется плохим решением, другая идея - использовать Apache mod_substitute, также кажется плохой практикой и накладными расходами.
Другой вариант - иметь оба приложения в корне и иметь логику поиска, чтобы увидеть, какой URL принадлежит какому приложению.
Любые идеи для установки, которая может использовать только Nginx / Apache. Это не ставит под угрозу наличие уникального URL-адреса или регулярного выражения.
Это мой .htaccess в корне
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteCond %{REQUEST_URI} !^/wp/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} !^/(.*)/products
RewriteRule ^(.*)$ /wp/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteRule ^(/)?$ wp/index.php [L]
RewriteCond %{REQUEST_URI} ^/(.*)/products
RewriteRule ^(.*)$ /products/index.php [L]
</IfModule>
Точная спецификация, которую я пытаюсь достичь, такова.
- Wordpress установлен в / wp, Magento в / products
- Коды языков через подпапки, используемые на обоих сайтах, для обозначения / en / wordpress-page / en / products / magento-page
Попытка 1
Используйте URL-адрес базовой ссылки, вводя / en / products там и сохраняя базовый URL-адрес как / products
так как первый запрос перенаправлен, мне пришлось работать с setEnv, как в корне .htaccess
RewriteCond %{REQUEST_URI} ^/(.*)/products
RewriteRule ^(.*)$ /products/index.php [E=MAGE_RUN_CODE:%1] [L]
затем в /products/.htaccess
RewriteCond "%{ENV:REDIRECT_MAGE_RUN_CODE}"
RewriteRule .* - [E=MAGE_RUN_CODE:%{ENV:REDIRECT_MAGE_RUN_CODE}] [L]
Я проверил код на index.php, выполнив
echo getenv('MAGE_RUN_CODE');
В моем случае код магазина - "en" и т. Д., Но переключатель языка не работает, он попадает в Magento, но получает 404 даже при том, что код магазина определенно проходит.