仅当 webp 文件存在时,htaccess 才会将 /dir/*.jpg 重写为 /dir/webp/*.webp

仅当 webp 文件存在时,htaccess 才会将 /dir/*.jpg 重写为 /dir/webp/*.webp

我正在尝试将所有网站文件(*.jpg|*.gif|*.png)重写到*.webp子目录中,但前提是该*.webp文件存在。以前的文件和新文件具有相同的名称,仅更改扩展名,并且*.webp文件都在原始文件的子目录下。

我正在努力使用 htaccess 来完成这项工作。基本规则是:

  1. 仅匹配 PNG/JPG/GIF 文件
  2. 原始图像目录模式为:/site/views/00_projects/[VARIABLE MAIN DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/*.jpg
  3. *.webp目录的模式是:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
  4. 仅当 webp 文件存在时才重写

我真的不知道该如何操作。有人能帮忙吗?

答案1

严格来说,您还需要确保发出请求的用户代理支持 WEBP 图像(即检查AcceptHTTP 请求标头image/webp)。

在根文件顶部附近尝试执行以下操作.htaccess

RewriteEngine On

# Rewrite images to WebP if they exist
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{DOCUMENT_ROOT}/$1/webp/$2.webp -f
RewriteRule ^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$ $1/webp/$2.webp [T=image/webp,L]

RewriteRule 图案(即^(site/views/00_projects/[^/]+/content/image/[^/]+)/([^/]+)\.(?:png|jpg|gif)$)匹配请求的pngjpggif图像,并将 URL 路径保存在$1反向引用中,将文件名保存在$2反向引用中(稍后在RewriteRule 代换细绳)。

首先状况RewriteCond指令)检查HTTP_ACCEPT服务器变量,检查用户代理是否支持 WEBP 图像。

第二状况检查目标 webp 图像是否存在。

T=image/webp标志对于将正确的 mime 类型(Content-Type标头)发送回客户端是必要的。

相关内容