htaccess配置RedirectMatch正则匹配含斜杠路径实现301重定向
解决方法
你现有规则的核心问题有两个:
- 两条规则分别只匹配
/es/和/en/前缀的路径,没有覆盖你需要的所有场景,且正则没有处理路径中间无内容的场景(比如/es/product1这种没有中间路径的地址) - 没有添加结尾锚定,可能会意外匹配到包含
product1但不是结尾的路径(比如/es/category/product123)
如果需要同时匹配/es/和/en/两种前缀,且前缀和product1之间可以是任意内容(包括空、带斜杠的多级路径),直接用下面的规则即可:
RedirectMatch 301 ^/(es|en)/.*product1$ https://domain.es/category/product1
如果需要严格限制product1是独立的路径段(避免匹配到/es/category/myproduct1这类路径),可以调整为:
RedirectMatch 301 ^/(es|en)/(.*)/?product1$ https://domain.es/category/product1
规则里的(.*)本身就支持匹配包含斜杠、字母的任意字符,/?用来兼容前缀后直接跟product1的场景,不会因为缺少中间斜杠导致匹配失败。
补充说明
如果后续你需要把前缀和product1之间的路径动态带到目标地址(比如/es/foo/bar/product1跳转到domain.es/foo/bar/product1),可以直接引用捕获组:
RedirectMatch 301 ^/(es|en)/(.*)/?product1$ https://domain.es/$2/product1
配置修改后记得清空浏览器缓存再测试,301重定向会被浏览器长期缓存,用无痕模式测试结果更准确。
内容的提问来源于stack exchange,提问作者Joan Cuscullola
相关产品推荐
相关产品推荐

