在 Apache Httpd 2.4 上,我知道.htaccess
我可以从文件中执行此操作
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.jpg$ $1.webp [T=image/webp]
为了实现内容协商,对于 jpg 请求,如果浏览器支持,则返回 webp。
好吧,我想在 webp 文件不存在时向 Symfony 发送请求,以便特定的 Symfony 控制器可以按需创建 webp 版本,我知道我可以做到这一点
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp -f
RewriteRule (.+)\.jpg$ $1.webp [T=image/webp]
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1.webp !-f
RewriteRule (.+)\.jpg$ index.php [PT]
但这会向 Symfony 发送原始 jpg 请求,是否可以通过.htaccess
重写向 Symfony 发送 webp 请求?
是的,但是您不需要原始
.jpg
请求才能知道如何生成相应的.webp
图像吗?.webp
除文件扩展名外,URL 路径在其他方面均相同。然后,您将在 PHP 代码中执行相同的检查...您已经知道该.webp
文件不存在,因此您只需检查Accept
HTTP 请求标头,生成.webp
图像并为其提供服务(如果不存在图像,则返回 404 )。在不从根本上改变 Symfony 检查请求的方式的情况下,不可能将请求“重写”到 webp 并期望 Symfony 接受它。(尽管我不明白为什么你需要这样做,如上所述。)
您也许可以传递一个 URL 参数来指示您的脚本
.webp
应该生成图像,但这并不否定需要进行与上面相同的检查,因此实际上没有必要。例如:然后, URL
generate-image
参数包含要生成的图像的文档根相对(无斜杠前缀)URL 路径.webp
。注意:您应该
L
在此规则上使用 flag,而不是PT
。您的其他规则也应该包括该L
标志。