Apache два приложения на одном домене на одном языке / en - Magento & Wordpress - PullRequest
0 голосов
/ 28 июня 2018

У нас есть 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 даже при том, что код магазина определенно проходит.

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Какую спецификацию вы пытаетесь достичь?

У вас есть несколько страниц, таких как /products, и несколько языков, таких как /en?

Я сделал что-то похожее на BXR.SU - мне не понравилось, как OpenGrok, мой бэкэнд, обрабатывал URL-адреса, поэтому я автоматически заставлял свой nginx исправлять URL-адреса поверх OpenGrok плавное исправление URL-адресов, представленных пользователю, тогда как серверная часть продолжит использовать старые URL-адреса (например, с /xref/ для большинства страниц, которые мне не нравятся, и которые были установлены для удаления с помощью nginx); этот подход кажется похожим на вашу спецификацию, где вы хотите сделать это на интерфейсном веб-сервере, не внося никаких изменений в бэкэнд.

Подход кратко описан в цикле перенаправления nginx, удалите index.php из url , с той идеей, что nginx имеет два типа перенаправлений - внутренние, куда попадает содержимое переменной $uri измененный (без какой-либо видимости для пользователя) и внешний, где клиенту предоставляется 301 Moved (или некоторый такой) ответ (и пользователь затем увидит, что браузер делает запрос с новым URL).

Например, вам может понадобиться что-то вроде следующего:

location /en/ {
    # issue an external redirect, unless we're here from an internal one
    if ($request_uri ~ "^(/en)(/product)(.*)") {
        return 301 $2$1$3; # external redirect
    }
    proxy_pass …;
}
location /products/ {
    rewrite ^(/products/)(en/)(.*) $2$1$3 last; # internal redirect
    …
}
0 голосов
/ 01 июля 2018

Вам нужна только некоторая конфигурация из backoffice.

Система => Конфигурация => Общие => Веб => Параметры URL

Добавить код магазина в URL Нет

Система => Конфигурация => Общие => Веб => Небезопасные

URL-адрес базовой ссылки http://example.com/en/products/

Система => Конфигурация => Общие => Веб => Защищенные

URL базовой ссылки https://example.com/en/products/

Затем добавьте правило в htaccess, чтобы установить правильный код хранилища:

SetEnvIf Host .*example.com/en* MAGE_RUN_CODE=en_store SetEnvIf Host .*example.com/fr* MAGE_RUN_CODE=fr_store

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...