如何用正则表达式重定向URL时复制并排除多个目录?
实现带指定目录排除的URL重定向正则规则
需求概述
需要将旧域名olddomain.com下的媒体文件URL重定向到新存储桶域名newdomain.com,但要排除sub2和sub3两个子目录(新存储桶无对应内容)。具体的URL匹配与转换要求如下:
旧URL示例(含需排除项)
olddomain.com/files/olddomain.com/files/sub1/olddomain.com/files/sub2/(需排除,不执行重定向)olddomain.com/files/sub3/(需排除,不执行重定向)
期望的新URL结果
newdomain.com/filesnewdomain.com/files/sub1/
修正后的重定向规则
你之前尝试的正则已经接近目标,但需要调整以覆盖完整场景并精准排除子目录:
1. 匹配规则(Source)
如果只处理带斜杠的/files/开头路径:
^/files/(?!sub2/|sub3/)(.*)$
如果需要同时兼容不带斜杠的/files路径:
^/files(?:/(?!sub2/|sub3/)(.*))?$
2. 目标地址(Target)
对应第一个匹配规则的目标:
newdomain.com/files/$1
对应第二个兼容无斜杠场景的目标:
newdomain.com/files$1
规则说明
- 原正则的
(?!sub2|sub3)会误匹配sub2abc这类非完整子目录的路径,加上斜杠(?!sub2/|sub3/)后,能精准排除以sub2/或sub3/为前缀的完整子目录。 - 第二个正则通过
(?:/(?!sub2/|sub3/)(.*))?$实现了路径部分的可选性,既可以匹配/files本身,也能匹配/files/sub1/这类下级路径。
验证效果
- 触发重定向的匹配项:
/files/→ 转换为newdomain.com/files//files/sub1/→ 转换为newdomain.com/files/sub1//files/sub1/media.mp4→ 转换为newdomain.com/files/sub1/media.mp4
- 自动排除的项:
/files/sub2/→ 不匹配规则,不执行重定向/files/sub3/image.png→ 不匹配规则,不执行重定向
内容的提问来源于stack exchange,提问作者saladaze
相关产品推荐
相关产品推荐

