问题代码
RewriteEngine On
RewriteCond %{REQUEST_URI} (?i)(.*)\.jpg-o$
RewriteRule (?i)(.*)\.jpg-o$ %1\.jpg [L,T=image/jpg,R]
AddType image/jpg .jpg
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_URI} (?i)(.+)/(.+)\.jpg$
RewriteCond %{DOCUMENT_ROOT}%1/webp/%2.webp -f
RewriteRule (?i)(.+)\.jpg$ %1/webp/%2.webp [L,T=image/webp,R]
AddType image/webp .webp
我想实现判断浏览器是否支持webp文件,如果支持webp则重写jpg链接为webp链接,不支持或没有对应webp文件则保持原样。这一部分的已经可以实现即
RewriteCond %{HTTP_ACCEPT} image/webp
RewriteCond %{REQUEST_URI} (?i)(.+)/(.+)\.jpg$
RewriteCond %{DOCUMENT_ROOT}%1/webp/%2.webp -f
RewriteRule (?i)(.+)\.jpg$ %1/webp/%2.webp [L,T=image/webp,R]
AddType image/webp .webp
其次保证jpg文件可以通过类似设置参数的方式,实现正常访问例如
访问:localhost/img/video/BV1hR4y1P7h7.jpg-o
重写为:localhost/img/video/BV1hR4y1P7h7.jpg
实现方法
RewriteCond %{REQUEST_URI} (?i)(.*)\.jpg-o$
RewriteRule (?i)(.*)\.jpg-o$ %1\.jpg [L,T=image/jpg,R]
AddType image/jpg .jpg
但重写正好符合了之前访问jpg重写为webp的条件,最终被重写为了webp。
取消重写为webp的部分自然可以生效。
我认为原因可能如下
localhost/img/video/BV1hR4y1P7h7.jpg-o
被重写为了
localhost/img/video/BV1hR4y1P7h7.jpg
第一次重写结束
打开了localhost/img/video/BV1hR4y1P7h7.jpg这一个链接
触发了第二次重写被重写为了
localhost/img/video/webp/BV1hR4y1P7h7.webp
我想应该不是在同一次重写中完成的,两条重写结尾都使用了 [L] 进行限制
那么如何保证这两个功能正常,求教辛苦了!