You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 规则1:优先处理已存在的WebP文件,匹配到后直接返回并终止后续规则(L标志),保证性能。T=image/webp用来设置正确的Content-Type头。
  2. 规则2:当WebP文件不存在时,把原JPG请求的路径替换为对应的WebP路径(比如/image.jpg → /image.webp),继续执行后续规则。
  3. Symfony标准规则:检查重写后的WebP路径对应的文件是否存在,因为文件还没生成,所以会把请求转发到index.php,此时Symfony接收到的请求URI就是WebP格式的路径。

后续Symfony配置

你只需要在Symfony中配置一个匹配WebP路径的路由(比如/{imagePath}.webp),对应的控制器负责根据原JPG文件生成WebP并保存到指定目录即可。下次再请求该图片时,规则1就会直接返回生成好的WebP文件,无需再经过Symfony。

备注:内容来源于stack exchange,提问作者nulll

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 02:58:02