重定向规则中Regex因重复路径引发无限循环问题求助
解决重定向无限循环问题
问题分析
你的重定向规则出现无限循环,核心原因是第一条规则的源正则过于宽泛——只要URL中包含/destinations/就会被匹配,包括重定向后目标URL里的/destinations/,导致规则反复触发,最终生成嵌套的错误URL。
解决方案
修改第一条规则的源正则,让它仅匹配**域名后首次出现/destinations/**的URL,确保重定向后的URL不会被再次匹配。
修改后的规则
第一条规则的源改为:
Source ^https://www.example.com/(?:(?!/destinations/).)*destinations/(.*) Target https://www.example.com/blog/travel/destinations/$1
正则说明
^:锚定URL开头,确保从域名开始匹配(?:(?!/destinations/).)*:非捕获组,匹配任意字符直到遇到第一个/destinations/,作用是确保当前匹配的/destinations/之前,路径中没有其他相同片段destinations/(.*):匹配目标路径,并捕获/destinations/之后的所有内容到分组$1- 目标中的
$1用来保留原URL中/destinations/之后的路径(比如japan),与优先级更高的规则兼容
为什么之前的负向预查无效
你之前使用的(?!.*/destinations/)位置错误,应该放在域名之后、/destinations/之前,用来检查前面的路径是否已包含/destinations/,而非其他位置。
验证效果
- 访问
https://www.example.com/destinations/japan时,优先级更高的规则会先触发,重定向到https://www.example.com/blog/travel/destinations/japan - 访问
https://www.example.com/destinations/france这类未被特殊规则匹配的URL时,会被修改后的规则重定向到https://www.example.com/blog/travel/destinations/france,且该目标URL不会被第一条规则再次匹配(路径中/destinations/前已有相同片段),避免无限循环
内容的提问来源于stack exchange,提问作者chris-bigg
相关产品推荐
相关产品推荐

