在 .htaccess 中,(.*)$ 和 .*$ 之间有什么区别

In .htaccess what is the difference between (.*)$ and .*$

使用重写时,(.)$ 和 .$ 之间的区别是什么,例如以下两行:

RewriteRule ^blog/blog(.*)$ http://example.com/blog [L,R=301]
RewriteRule ^blog/blog.*$ http://example.com/blog [L,R=301]

谢谢

这两个正则表达式模式本身 (.*)$ 和 .*$ 意思相同:

那个。表示任何单个字符
* 是量词,表示 any char
出现 0 次或多次 $ 是字符串字符的结尾...

不同的是,第一个用括号分组。它只是意味着匹配项 (.*) 的一部分随后可以用在带有 $# 的反向引用中。所以对于你给出的例子:

这是有道理的,因为您在替换中的 $1 有一个分组可以从中提取:

RewriteRule ^blog/blog(.*)$ http://example.com/blog [L,R=301]

这没有意义,因为 $1 没有任何可取之处:

RewriteRule ^blog/blog.*$ http://example.com/blog [L,R=301]