
本文介绍如何利用 apache 的 mod_rewrite 模块,无需修改 html 代码,即可将所有对旧图片域名(如 `img.example-domain.com`)的请求透明重定向至新的 aws 图片服务器地址。
在网站运维中,当原始图片服务临时下线(例如旧服务器维护或迁移期间),而前端代码中大量硬编码了旧域名(如 ),逐行修改 HTML 或模板成本高、易出错、且难以回滚。此时,最优雅的解决方案是在 Web 服务器层实施HTTP 重定向——让 Apache 自动拦截并转发所有匹配旧域名的请求到新地址。
Apache 提供了强大且成熟的 mod_rewrite 模块,完全支持基于 Host 头的条件重定向。你只需在站点根目录的 .htaccess 文件(或虚拟主机配置中)添加如下规则:
RewriteEngine On RewriteCond %{HTTP_HOST} ^img\.example-domain\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.img\.example-domain\.com$ RewriteRule ^(.*)$ https://img.example-domain.com.amazon.etc/$1 [R=302,L]
✅ 关键说明:
- RewriteCond 使用正则匹配请求头中的 Host 字段,覆盖无 www 和带 www 的两种常见子域名形式;注意点号 . 需转义为 \.,避免误匹配;
- RewriteRule 中 ^(.*)$ 捕获完整 URI 路径(含查询参数),$1 确保路径和参数原样传递至新域名;
- [R=302,L] 表示临时重定向(302),浏览器不会缓存该跳转,便于后续灵活切换回原服务;若确认为永久迁移,请改为 [R=301,L](301 重定向),但需谨慎——客户端和 CDN 可能长期缓存,后期撤销较难;
- 建议使用 https:// 开头的新 URL(如示例中所示),确保协议安全;若新 AWS 地址实际为 s3.amazonaws.com 或 CloudFront 域名,请如实填写(例如 https://my-bucket.s3.us-east-1.amazonaws.com);
- 确保 Apache 已启用 mod_rewrite(通常默认开启),并在对应虚拟主机或目录中设置 AllowOverride All,否则 .htaccess 不生效。
⚠️ 注意事项:
- 此方案仅重定向HTTP 请求,不影响页面内
标签的 src 属性值本身;但现代浏览器会自动发起重定向后的资源加载,用户无感知;
- 若旧域名 DNS 尚未指向当前 Apache 服务器,需先将 img.example-domain.com 的 A/AAAA 记录解析到该 Apache 主机 IP,否则请求根本无法抵达重写引擎;
- 对于 HTTPS 请求,需确保 SSL 证书覆盖重定向前的域名(即 img.example-domain.com),否则用户会遭遇证书警告;可考虑使用通配符证书或 Let’s Encrypt 多域名证书;
- 生产环境上线前,务必在测试环境中验证重定向行为(如用 curl -I http://img.example-domain.com/test.png 检查响应头 Location 是否正确)。
综上,借助 Apache 的 mod_rewrite,你可以在零代码侵入的前提下,快速、可控、可逆地完成图片资源域名迁移,是 DevOps 场景下的标准实践之一。










