首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prestashop 1.7.8.6多存储nginx重写规则

Prestashop 1.7.8.6多存储nginx重写规则
EN

Stack Overflow用户
提问于 2022-05-29 12:28:00
回答 1查看 220关注 0票数 1

我将prestashop 1.7安装为一个多存储区,并将nginx重写规则编写为

代码语言:javascript
复制
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显示图像

EN

回答 1

Stack Overflow用户

发布于 2022-05-29 15:59:02

为了解释这里发生了什么,我需要提到nginx 请求处理阶段,这是一个没有多少人真正正确理解的主题。

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

代码语言:javascript
复制
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级别的之前,是重写图像请求的规则集:

代码语言:javascript
复制
rewrite ^/(?:shop-1|shop-2)(/.*) $1;
... image URIs rewrite rules here

请注意,对于此规则,我不使用last (或break)标志,因为在此重写将被触发之后,不应该终止重写规则链。您在问题中所显示的这两个位置都不需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72423624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档