Prestashop 1.7.8.6 multistore nginx重写规则



我将prestashop 1.7安装为multistore,并将nginx重写规则写入

location /shop-1/ {
rewrite ^/shop-1/(.*)$ /$1 last;
try_files $uri $uri/ /index.php?$args;
}
location /shop-2/ {
rewrite ^/shop-2/(.*)$ /$1 last;
try_files $uri $uri/ /index.php?$args;
}

我遵循nginx配置文件https://devdocs.prestashop.com/1.7/basics/installation/nginx/

现在Q是父域导航正确并显示图像,但multistore重定向更正为http://example.com/{shop-1或shop-2},但在multishop url上不显示图像,在multishop url上得到nginx 404错误,但在父域上显示相同的图像。

的例子:

http://example.com/shop-1/45-medium_default/skirt.jpg不显示图像

http://example.com/45-medium_default/skirt.jpg显示图像

为了解释这里发生的事情,我需要参考nginx请求处理阶段,这是一个没有多少人真正理解的主题。

下面是在NGX_HTTP_SERVER_REWRITE_PHASE上执行的一组重写规则:

rewrite ^/(d)(-[w-]+)?/.+.jpg$ /img/p/$1/$1$2.jpg last;
rewrite ^/(d)(d)(-[w-]+)?/.+.jpg$ /img/p/$1/$2/$1$2$3.jpg last;
rewrite ^/(d)(d)(d)(-[w-]+)?/.+.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
rewrite ^/(d)(d)(d)(d)(-[w-]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg last;
rewrite ^/(d)(d)(d)(d)(d)(-[w-]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg last;
rewrite ^/(d)(d)(d)(d)(d)(d)(-[w-]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg last;
rewrite ^/(d)(d)(d)(d)(d)(d)(d)(-[w-]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/(d)(d)(d)(d)(d)(d)(d)(d)(-[w-]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg last;
rewrite ^/c/([w.-]+)/.+.jpg$ /img/c/$1.jpg last;

可以看到,它们都不匹配/shop-1/45-medium_default/skirt.jpg请求URI。所以在下一个回合,在NGX_HTTP_FIND_CONFIG_PHASE期间,您的location /shop-1/ { ... }将被选中来处理请求。接下来,在rewrite ^/shop-1/(.*)$ /$1 last;规则被执行之后,您的请求URI将被重写为/45-medium_default/skirt.jpg,并且由于rewrite指令上使用的last标志,NGX_HTTP_FIND_CONFIG_PHASE将再次被执行。但是,NGX_HTTP_SERVER_REWRITE_PHASE不会再次执行,并且不会根据这些规则重写新的URI。您应该做的是在server级别之前放置一个重写规则。重写图像请求的规则集:

rewrite ^/(?:shop-1|shop-2)(/.*) $1;
... image URIs rewrite rules here

请注意,我没有使用last(或break)标志,因为重写规则链不应该在重写触发后终止。你在问题中显示的这两个位置根本就不需要。

最新更新