Regex htaccess:查找相同子字符串重复两次的字符串

问题描述 投票:0回答:1

摘要:我想创建一个 htaccess 重定向,将发行说明链接重定向到当前版本 - 但当前版本的链接本身会遇到相同的过滤器,这可能会导致无限循环,所以我想捕获这种特殊情况。 . 且不能。

所以,我有每个版本的发行说明,其 URL 如下:

https://docs.example.com/product/1.12/product-release-notes-1-12.html
https://docs.example.com/product/1.13/product-release-notes-1-13.html

我想要的是使用htaccess将链接从错误的版本重定向到正确的版本,这样

https://docs.example.com/product/1.12/product-release-notes-1-13.html
就变成了
https://docs.example.com/product/1.12/product-release-notes-1-12.html
.

重定向本身很简单:

RewriteRule ^product/1\.([0-9]+)/product-release-notes?(.*).html$ product/1\.$1/product-release-notes-1-$1.html [L,R=302]

但是,它也命中了正确的链接,导致无限循环。

我可以通过在该行之前添加每个版本的“停止处理”行来修复它,例如:

RewriteRule ^product/1\.12/product-release-notes-1-12.html$ product/1\.$1/product-release-notes-1-12.html - [L]

但是,这确实需要为每个新版本添加新行。为了避免这种情况,我想在这一行中使用一个正则表达式来捕获

https://docs.example.com/product/1.12/product-release-notes-1-12.html
https://docs.example.com/product/1.13/product-release-notes-1-13.html
not 捕获
https://docs.example.com/product/1.13/product-release-notes-1-12.html

是否可以制作这样的正则表达式?如果可以,如何制作?谢谢!

regex .htaccess
1个回答
0
投票

但是,它也命中了正确的链接,导致无限循环

您可以通过在捕获组中使用第一个数字(例如 12、13 等)来避免匹配正确的链接,并在否定前瞻内的相同模式中使用相同的反向引用,以避免在链接中再次匹配相同的数字。

考虑以下重定向规则:

RewriteRule ^(product/1\.(\d+)/product-release-notes-1-)(?!\2\.)\d+(\.html)$ /$1$2$3 [NC,L,R=302]

详情:

  • 我们正在第二个捕获组中的
    1.
    之后捕获数字,即
    (\d+)
  • 然后在匹配后的相同模式中
    1-
    ,我们使用负前瞻断言
    (?!\2\.)
    ,当我们在当前位置前面有相同的数字后跟一个点时,正则表达式可以避免匹配。
© www.soinside.com 2019 - 2024. All rights reserved.