基于 nginx $http_host 和 $uri 的 Magento MAGE_RUN_TYPE 的 nginx 映射正则表达式

基于 nginx $http_host 和 $uri 的 Magento MAGE_RUN_TYPE 的 nginx 映射正则表达式

我正在尝试编写一个 nginx 配置,添加一个自定义标头并根据使用 map 计算的两个变量(基于 $uri 和 $http_host)使用 fastcgi_param 传递一个变量。

map $uri $STORE_LANGUAGE {
    ~^/products en;
    ~^/de/produkte de;
    ~^/fr/produits fr;
    ~^/hu/termekek hu;
}
map $http_host $MAGE_RUN_CODE {
    www.example.com example_com_;
}

server {
    listen 80;
    add_header mage-run-code $MAGE_RUN_CODE$STORE_LANGUAGE;
    ...
    location ~ \.php$ {
       fastcgi_param MAGE_RUN_CODE $MAGE_RUN_CODE$STORE_LANGUAGE;
       fastcgi_param MAGE_RUN_TYPE store;
}

目标是能够通过 fastcgi_param MAGE_RUN_CODE 将 mage-run-code 传递给 Magento 2.2(并且现在可以使用标头作为调试的简便方法)。这样 Magento 就知道要为访客提供哪个商店视图。

上述代码适用于 www.example.com/products。(预期行为:example_com_en)

为了让 www.example.com/products/tshirt.html 也能正常工作,我需要在 STORE_LANGUAGE 的正则表达式中做哪些更改?

编辑:对于 www.example.com/products,$MAGE_RUN_CODE 计算正确(“example_com_”),$STORE_LANGUAGE(“en”)计算正确,结果为“example_com_en”。

对于 www.example.com/products/tshirt.html,$MAGE_RUN_CODE 计算正确(基于 $http_host)。但 $STORE_LANGUAGE 返回空。因此,$MAGE_RUN_CODE$STORE_LANGUAGE 的组合是“example_com_”,而不是 tshirt.html URL 预期的“example_com_en”。

相关内容