如何通过.htaccess实现webp不存在时301重定向到同名jpg图片
需求可行性结论
该需求可以完全实现,依赖Apache的mod_rewrite模块即可完成,不需要额外编写服务端脚本。
前置准备
- 确认服务器Apache已开启mod_rewrite模块,绝大多数虚拟主机、默认Apache环境都会默认开启该模块
- 确认站点目录开启了.htaccess配置覆写权限(
AllowOverride配置为All即可,一般默认支持)
具体配置步骤
- 找到站点根目录(存放网页文件的一级目录)下的
.htaccess文件,如果不存在就新建一个纯文本文件,命名严格为.htaccess(注意文件名开头是半角点,没有任何后缀名) - 将如下规则写入文件中,建议放在文件靠顶部的位置,避免被其他已有的重写规则优先级覆盖:
RewriteEngine On # webp不存在时301跳转到同路径同名jpg RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.+)\.webp$ /$1.jpg [L,R=301]
- 保存文件后上传到服务器对应目录即可生效。
规则逻辑说明
RewriteEngine On:启用重写引擎,是所有重写规则生效的必要前置配置RewriteCond %{REQUEST_FILENAME} !-f:重写前置判断:当前用户请求的webp文件在服务器磁盘上不存在,只有满足这个条件才会触发后面的跳转规则RewriteRule ^(.+)\.webp$ /$1.jpg [L,R=301]:匹配所有以.webp结尾的请求路径,通过正则捕获webp扩展名前的完整路径和文件名,拼接为同路径同名的jpg地址做跳转;其中R=301标记该跳转为301永久重定向,L标记匹配到该规则后停止执行后续重写规则,避免规则冲突。
适配特殊场景说明
- 如果你的站点部署在域名的二级子路径下(比如访问地址为
https://example.com/site/),请把规则中RewriteRule部分的开头斜杠去掉,修改为RewriteRule ^(.+)\.webp$ $1.jpg [L,R=301],避免跳转到域名根目录下的文件 - 配置测试前请清空浏览器缓存,301永久重定向会被浏览器本地强缓存,旧缓存会导致测试结果不准
- 如果需要扩展其他格式的跳转(比如png不存在跳jpg),只需要修改规则里对应的扩展名即可。
内容的提问来源于stack exchange,提问作者enzo
相关产品推荐
相关产品推荐

