无法通过.htaccess的mod_rewrite规则提供WebP图片服务
问题解决:Apache mod_rewrite 实现WebP图片自动替换
背景
我是BCA专业在读学生,在一家IT公司兼职担任内部资深SEO专员(任职超2年),目前正在学习Python,掌握HTML和CSS技能。
问题描述
为优化网站性能,计划将全站大尺寸PNG/JPG图片替换为WebP格式。因网站规模庞大(7-8万页面、10万+图片),选择通过Apache的mod_rewrite规则实现,无需修改HTML代码。在根目录.htaccess中添加了以下规则,但未生效:
<ifModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_ACCEPT} image/webp RewriteCond %{REQUEST_URI} (?i)(.*)(\.jpe?g|\.png)$ RewriteCond %{DOCUMENT_ROOT}/assets/webp/$1.webp -f RewriteRule (?i)(.*)(\.jpe?g|\.png)$ %1\.webp [L,T=image/webp,R] </IfModule> <IfModule mod_headers.c> Header append Vary Accept env=REDIRECT_accept </IfModule> AddType image/webp .webp
WebP图片统一存储在ROOT/assets/webp/目录,原PNG/JPG存于ROOT/assets/img/。
已尝试的排查步骤
- 修改WebP文件名格式为
img.png.webp; - 确认Apache已启用mod_rewrite(网站已有其他重定向规则正常运行);
- 联系运维人员重新加载Apache服务;
- 咨询AI工具,得到的建议均已尝试过。
补充信息
- 目录结构:WebP文件路径为
domain.com/assets/webp/,原图片路径为domain.com/assets/img/; - Apache日志中无重写相关错误;
- mod_rewrite和mod_headers模块均已启用;
.htaccess文件位于网站根目录(mydomain.com/.htaccess)。
后续尝试仍未解决
调整规则后依旧无效:
RewriteEngine On RewriteCond %{HTTP_ACCEPT} image/webp RewriteCond %{REQUEST_FILENAME} (.*)\.(png|gif|jpe?g)$ RewriteCond /assets/webp/%{REQUEST_FILENAME}.webp -f RewriteRule ^ /assets/webp/%1.webp [L,T=image/webp,E=accept:1] <IfModule mod_headers.c> <FilesMatch "\.(png|gif|jpe?g)$"> Header append Vary Accept </FilesMatch> </IfModule>
最终解决方案
通过@arkascha提供的规则修复后,问题解决,最终.htaccess规则如下:
RewriteCond %{HTTP_ACCEPT} image/webp RewriteCond %{REQUEST_URI} ^/assets/img/(.+)(?:\.jpe?g|\.png)$ RewriteCond %{DOCUMENT_ROOT}/assets/webp/%1.webp -f RewriteRule ^ /assets/webp/%1.webp [L,T=image/webp,E=accept:1] <IfModule mod_headers.c> <FilesMatch "\.(png|gif|jpe?g)$"> Header append Vary Accept </FilesMatch> </IfModule>
内容的提问来源于stack exchange,提问作者Reymond135
相关产品推荐
相关产品推荐

