如何解决.htaccess多次重写的问题?

问题代码

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] 进行限制


那么如何保证这两个功能正常,求教辛苦了!

阅读 999
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题