如何在.htaccess中设置规则,将img_*_r.jpg批量重定向为img_*_s.jpg?
批量重定向img_xxxx_r.jpg到img_xxxx_s.jpg的.htaccess规则
Hey,这个需求用Apache的mod_rewrite就能轻松搞定,我帮你写好规则并拆解清楚每一部分,方便你理解和调整:
首先确保你的服务器已经启用了mod_rewrite(绝大多数商用主机默认都开启了),然后把下面的代码添加到网站根目录的.htaccess文件中:
RewriteEngine On # 匹配img_xxxx_r.jpg格式的图片,永久重定向到对应img_xxxx_s.jpg RewriteRule ^img_([0-9]+)_r\.jpg$ /img_$1_s.jpg [R=301,L]
规则细节解释:
RewriteEngine On:必须放在最前面,用来开启mod_rewrite的重写功能,没有这一行所有规则都不会生效- 匹配规则
^img_([0-9]+)_r\.jpg$:^和$:分别标记URL的开头和结尾,确保我们只匹配完整的文件名,不会误匹配类似img_123_r.jpg.png这类文件img_:固定匹配文件名开头的字符串([0-9]+):用括号捕获文件名中的数字部分(比如img_4324_r.jpg里的4324),这部分内容会被存为$1,供后面的目标URL使用_r\.jpg:匹配文件名结尾的_r.jpg,这里的.要加反斜杠转义,因为在正则表达式里.是匹配任意字符的通配符
- 目标URL
/img_$1_s.jpg:把捕获到的数字$1放回去,同时把_r替换成_s,生成对应的目标文件名 - 标记参数
[R=301,L]:R=301:表示这是永久重定向,对搜索引擎SEO友好,也会让浏览器缓存这个重定向规则L:表示这是最后一条规则,一旦匹配成功就停止处理后续的重写规则,避免冲突
额外注意事项:
- 如果你的图片存放在子目录(比如
/assets/images/),只需要调整规则里的路径即可,示例:RewriteRule ^assets/images/img_([0-9]+)_r\.jpg$ /assets/images/img_$1_s.jpg [R=301,L] - 测试阶段建议先用
R=302(临时重定向),确认规则生效且正确后再改成301,避免浏览器缓存错误的重定向规则导致测试麻烦 - 确保你的
.htaccess文件有足够的权限(通常是644),并且服务器允许使用重写规则(如果是虚拟主机,可能需要在控制面板开启相关权限)
内容的提问来源于stack exchange,提问作者Davide Infsercom
相关产品推荐
相关产品推荐

