避免不必要的重定向
如果您无法使用 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 许可获得许可。