Я работаю со средой для целей тестирования, основанной на нескольких версиях magento через стек nginx + php-fpm + mysql, я помещаю каждый дистрибутив в разные папки, а в файле конфигурации nginx vhost я использую следующее предложение:
server_name ~^(?<version>.+)\.magento\.test$; root [root_path]/distro/$version;
Итак, пока здесь я могу получить любой динамический URL-адрес, сопоставленный с его папкой
ce107.magento.test => [root_path]/distro/ce107/ ce108.magento.test => [root_path]/distro/ce108/ ce109.magento.test => [root_path]/distro/ce109/
Проблема начинается, когда я пытаюсь использовать «метку имени хоста» для переключения веб-сайтов в каждом дистрибутиве:
us.ce107.magento.test, ar.ce107.magento.test ...
потому что nginx ищет: [корневой_путь] /distro/us.ce107/ и [корневой_путь] /distro/ar.ce107/ папки.
Поэтому мне нужно проанализировать и получить значения:
[ws_code].[version].magento.test
и я не могу понять, как это сделать, может быть, я мог бы использовать «map $ host $ ws_code {}» для анализа значения $ ws_code и применить какое-нибудь регулярное выражение для удаления «ws_code». часть из $ версии
Кстати, очевидно, что я могу сделать это "жестко", но я хочу, чтобы это было "динамично"
Может ли кто-нибудь помочь с этим? Заранее спасибо!
В (?<version>.+)
regexp будет использовать жадное совпадение и назначить его $version
переменная. Вы можете сделать то же самое, чтобы соответствовать обоим ws_code
и version
:
server_name ~^(?<ws_code>.+)\.(?<version>.+?)\.magento\.test$;
root [root_path]/distro/$version/$ws_code;
Я использовал жадный матч для [ws_code]
и не жадный для [version]
. Также я бы использовал что-то более детерминированное, например [a-zA-Z0-9-]+
чтобы исключить знак точки разделителя домена из возможного совпадения (в этом случае нам не нужно проверять, является ли алгоритм совпадения жадным или нет):
server_name ~^((?<ws_code>[a-z]+)\.)?(?<version>[a-zA-Z0-9-]+)\.magento\.test$;
root [root_path]/distro/$version;
Дополнительные ()?
фигурные скобки над ws_code matchig позволят этой конфигурации соответствовать как домену 3-го уровня с одной доступной переменной, так и домену 4-го уровня с двумя доступными переменными. Вы можете захотеть назначить переменную по умолчанию для ws_code
.