Apache RedirectMatch正则:忽略含指定关键词的URL重定向
Apache RedirectMatch 排除含特定关键词路径的配置方案
你原有规则的问题出在负向预查的锚定逻辑错误:加了$限定connect必须出现在路径末尾才会触发排除,自然无法覆盖connect后带子路径的场景。
直接替换为如下配置即可实现「只要/en/路径下包含connect关键词就跳过跳转,其余/en/路径正常301跳转」的需求:
<If "%{HTTP_HOST} == 'domain-one.com'"> RedirectMatch 301 ^/en/(?!connect(/.*)?$)(.*)$ https://domain-two.com/en/$2 </If>
正则逻辑说明
^/en/:保留原有规则的匹配范围,仅对域名下/en/开头的路径做跳转判断(?!connect(/.*)?$):负向预查逻辑,只要/en/后第一段路径为connect,无论connect后是否携带子路径(比如/en/connect、/en/connect/page1、/en/connect/user/auth这类路径),都会判定为匹配失败,不触发重定向(.*)$:捕获符合跳转要求的路径后缀,自动拼接到目标域名对应路径后
如果后续需要新增排除的关键词,直接在负向预查段用|分隔关键词即可,例如要同时排除connect、login、public三个路径段,可将规则修改为:
RedirectMatch 301 ^/en/(?!(connect|login|public)(/.*)?$)(.*)$ https://domain-two.com/en/$3
内容的提问来源于stack exchange,提问作者user2074224
相关产品推荐
相关产品推荐

