我将prestashop 1.7安装为一个多存储区,并将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;
}我遵循来自https://devdocs.prestashop.com/1.7/basics/installation/nginx/的nginx文件。
现在,Q是正确导航和显示图像的父域,但多存储重定向到http://example.com/{shop-1或shop-2},但不显示多个商店url上的图像,在multishop url上得到nginx404错误,而在父域显示相同的图像。
示例:
default/Scrt.jpg没有显示图像
default/Scrt.jpg显示图像
发布于 2022-05-29 15:59:02
为了解释这里发生了什么,我需要提到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)标志,因为在此重写将被触发之后,不应该终止重写规则链。您在问题中所显示的这两个位置都不需要。
https://stackoverflow.com/questions/72423624
复制相似问题