我正在尝试编写一个 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”。