重定向所有以“.-detail”结尾的 URL 以删除点

重定向所有以“.-detail”结尾的 URL 以删除点

我遇到了一个相当奇怪的情况,我们的旧 URL 以 结尾.-detail,需要更改为-detail

例如:

  • example.com/product.-detail需要更改为example.com/product-detail

换句话说,.需要去除。

我认为一个简单的 301 规则就可以解决问题,但我无法让条件字符串通过

RewriteRule ^$.-detail https://www.example.com/$1-detail [R=301,L]

请问正确的做法是什么?

答案1

RewriteRule ^$.-detail https://www.example.com/$1-detail [R=301,L]

正则表达式存在一些问题:

  • $(字符串结尾锚点) 的位置错误。它应该位于正则表达式的末尾(您希望匹配URL.-detail路径的末尾,即\.-detail$)。
  • 没有捕获子模式,因此$1反向引用始终为空。
  • 文字点应该用反斜杠转义,否则它会匹配任何字符并导致重定向循环(如果存在如上所述的捕获子模式) - 因为它还会匹配重定向的 URL,每次减少 1 个字符,直到 URL 中不再剩下任何内容!

RewriteRule 图案(第一个参数)应该是这样的:

(.+)\.-detail$

^由于正则表达式默认是贪婪的,并且点匹配“所有内容”,因此不需要(字符串起始锚点)。(尽管如果这样做更容易阅读,您也可以将其包括在内。)

然后反向$1引用包含由括号内的子模式匹配的 URL 路径的部分(.+)

您可以捕获点之前和之后的两个部分,以避免在代换。 例如:

RewriteRule (.+)\.(-detail)$ https://www.example.com/$1$2 [R=301,L]

反向$2引用仅包含-detailRewriteRule 图案

相关内容