跳到内容

避免不必要的重定向

编辑此页

如果您无法使用 symfony messenger,您可以配置您的 Web 服务器以避免图像控制器的一些重定向。本文档中描述的解决方案仅在使用 WebPathResolver 时有效,当您将图像存储在 Web 服务器之外的位置时无效。

当图像未被缓存时,imagine_filter 将图像链接生成为图像控制器的路径。图像控制器创建图像,然后将客户端重定向到生成的图像。

默认情况下,此重定向使用状态 302 (临时移动) 完成。这很重要,因为当您稍后清除缓存时,需要再次调用控制器,以便重新生成图像。当返回 301 时,我们告诉客户端资源已永久移动。即使 twig 过滤器再次生成控制器 URL,客户端也会缓存此信息并直接请求 (不存在的) 缓存图像。

如果您想安全地使用 301 以避免不必要的重定向,您需要配置您的 Web 服务器以将对丢失图像的请求路由到 Symfony。

1
2
3
4
5
6
7
8
9
10
11
12
13
# bypass thumbs cache image files
location ~ ^/media/cache/resolve {
  expires 1M;
  access_log off;
  add_header Cache-Control "public";
  try_files $uri $uri/ /index.php?$query_string;
}

location ~* \.(js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg)$ {
    expires 30d;
    add_header Pragma "public";
    add_header Cache-Control "public";
}

通过这样的配置,您可以安全地将 liip_imagine.controller.redirect_response_code 设置为 301。

如果您像这样配置您的 Web 服务器,您还可以使用 imagine_filter_cache 永远不会重定向您的客户端。

这项工作,包括代码示例,均根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本