Apache Httpd 2.4中WebP内容协商优化:WebP文件不存在时向Symfony发送WebP请求的实现方法
Apache Httpd 2.4中WebP内容协商优化:WebP文件不存在时向Symfony发送WebP请求的实现方法
没问题,我来帮你搞定这个需求!你想要的效果是:当浏览器支持WebP但对应的WebP文件还没生成时,让Symfony接收到WebP格式的请求(而不是原JPG请求),这样控制器就能直接处理WebP的生成逻辑,下次请求时就可以直接返回生成好的文件了。
实现思路
核心思路是先把JPG请求重写为对应的WebP路径,再利用Symfony的标准重写规则,让不存在的WebP请求自动转发到Symfony处理。这样Symfony收到的就是WebP格式的请求URI,完全符合你的需求。
完整的.htaccess配置
# 开启Rewrite引擎 RewriteEngine On # 规则1:浏览器支持WebP且目标WebP文件存在时,直接返回WebP资源 RewriteCond %{HTTP_ACCEPT} image/webp RewriteCond %{DOCUMENT_ROOT}/$1.webp -f RewriteRule (.+)\.jpg$ $1.webp [T=image/webp,L] # 规则2:浏览器支持WebP但WebP文件不存在时,将请求路径重写为WebP格式 RewriteCond %{HTTP_ACCEPT} image/webp RewriteCond %{DOCUMENT_ROOT}/$1.webp !-f RewriteRule (.+)\.jpg$ $1.webp [L] # Symfony标准重写规则:所有非文件/非目录的请求转发到index.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ index.php [L]
配置说明
- 规则1:优先处理已存在的WebP文件,匹配到后直接返回并终止后续规则(
L标志),保证性能。T=image/webp用来设置正确的Content-Type头。 - 规则2:当WebP文件不存在时,把原JPG请求的路径替换为对应的WebP路径(比如
/image.jpg→/image.webp),继续执行后续规则。 - Symfony标准规则:检查重写后的WebP路径对应的文件是否存在,因为文件还没生成,所以会把请求转发到
index.php,此时Symfony接收到的请求URI就是WebP格式的路径。
后续Symfony配置
你只需要在Symfony中配置一个匹配WebP路径的路由(比如/{imagePath}.webp),对应的控制器负责根据原JPG文件生成WebP并保存到指定目录即可。下次再请求该图片时,规则1就会直接返回生成好的WebP文件,无需再经过Symfony。
备注:内容来源于stack exchange,提问作者nulll
相关产品推荐
相关产品推荐

