目的是在支持webp的浏览器返回webp图片,同时保障不支持的webp的ie之类的浏览器返回jpg。
选择了.htaccess重写链接
即例如访问
localhost/img/video/BV1ba4y1a76o.jpg
在支持webp的浏览器重写为
localhost/img/video/BV1ba4y1a76o.webp
不支持或没有对应的webp文件则维持原样
localhost/img/video/BV1ba4y1a76o.jpg
实现方法是
RewriteEngine On
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_URI} (?i)(.*).jpg$
RewriteCond %{DOCUMENT_ROOT}%1.webp -f
RewriteRule (?i)(.*).jpg$ %1.webp [L,T=image/webp,R]
AddType image/webp .webp
以下是产生问题的点
为方便文件管理需要对文件结构修改,webp文件并不与jpg文件放在一个文件夹,文件夹的结构与功能如下
那么按照要求链接
localhost/img/video/BV1ba4y1a76o.jpg
需要重写为
localhost/img/video/webp/BV1ba4y1a76o.webp
那么在这时.htaccess如何修改?我理解了下这里的写法
RewriteCond %{HTTP_ACCEPT} image/webp
从请求头中判断浏览器是是否支持webp
RewriteCond %{REQUEST_URI} (?i)(.*).jpg$
请求的链接是jpg文件
RewriteCond %{DOCUMENT_ROOT}%1.webp -f
读取同一目录下是否有同名的webp文件
RewriteRule (?i)(.*).jpg$ %1.webp [L,T=image/webp,R]
符合所有的RewriteCond限定那么重写链接
大量使用到的%1表示指向文件本身
我尝试了做了以下的修改
RewriteRule (?i)(.*).jpg$ %1.webp [L,T=image/webp,R]
修改为
RewriteRule (?i)(.*).jpg$ %1 [L,T=image/webp,R]
那么重写
localhost/img/video/BV1ba4y1a76o.jpg
的结果为
localhost/img/video/webp/BV1ba4y1a76o
那么使用%1将很难将BV1ba4y1a76o.jpg重写为webp/BV1ba4y1a76o.webp
而且RewriteCond %{DOCUMENT_ROOT}%1.webp –f这条限定也要去查询webp文件夹中是否有相关文件。
那么有什么办法可以解决问题?
如果这个%1可以当成变量进行字符串操作那么我想会简单很多,但我并没有找到.htaccess在这方面的用法。
如果网络上有这方面的讲解或者这个问题的其他解法,请麻烦告诉我也可以节省时间重复回答。辛苦了!
先前的答案有些问题,重新查了一下资料,
%
开头的反向引用是引用的 RewriteCond 的捕获组 、$
开头的反向引用才是 RewriteRule ,所以调整了一下,试了一下 OK。