摘要:我想创建一个 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
。
是否可以制作这样的正则表达式?如果可以,如何制作?谢谢!
但是,它也命中了正确的链接,导致无限循环
您可以通过在捕获组中使用第一个数字(例如 12、13 等)来避免匹配正确的链接,并在否定前瞻内的相同模式中使用相同的反向引用,以避免在链接中再次匹配相同的数字。
考虑以下重定向规则:
RewriteRule ^(product/1\.(\d+)/product-release-notes-1-)(?!\2\.)\d+(\.html)$ /$1$2$3 [NC,L,R=302]
详情:
1.
之后捕获数字,即(\d+)
1-
,我们使用负前瞻断言(?!\2\.)
,当我们在当前位置前面有相同的数字后跟一个点时,正则表达式可以避免匹配。