我正在尝试将所有网站文件(*.jpg|*.gif|*.png
)重写到*.webp
子目录中,但前提是该*.webp
文件存在。以前的文件和新文件具有相同的名称,仅更改扩展名,并且*.webp
文件都在原始文件的子目录下。
我正在努力使用 htaccess 来完成这项工作。基本规则是:
- 仅匹配 PNG/JPG/GIF 文件
- 原始图像目录模式为:
/site/views/00_projects/[VARIABLE MAIN DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/*.jpg
- 新
*.webp
目录的模式是:/site/views/00_projects/[VARIABLE DIR NAME HERE]/content/image/[VARIABLE SUBDIR NAME HERE]/webp/*.webp
- 仅当 webp 文件存在时才重写
我真的不知道该如何操作。有人能帮忙吗?
答案1
严格来说,您还需要确保发出请求的用户代理支持 WEBP 图像(即检查Accept
HTTP 请求标头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)$
)匹配请求的png
、jpg
或gif
图像,并将 URL 路径保存在$1
反向引用中,将文件名保存在$2
反向引用中(稍后在RewriteRule
代换细绳)。
首先状况(RewriteCond
指令)检查HTTP_ACCEPT
服务器变量,检查用户代理是否支持 WEBP 图像。
第二状况检查目标 webp 图像是否存在。
该T=image/webp
标志对于将正确的 mime 类型(Content-Type
标头)发送回客户端是必要的。