RewriteRule ^(.*)$ 和 RewriteRule (.*)$ 的区别

6
当将所有页面从旧域名迁移到新域名时,我注意到一些人在重写规则中添加了^,而其他人则没有。
两者之间有什么不同?
RewriteRule ^(.*)$ http://mynewdomain.com/$1 [R=301,L]

并且

RewriteRule (.*)$ http://mynewdomain.com/$1 [R=301,L]

谢谢。

2个回答

7

他们都错了。在反向引用中没有必要匹配任何内容,因为Apache有一个内置变量可以获取当前URL:%{REQUEST_URI}

RewriteRule .? http://www.newdomain.com%{REQUEST_URI} [L,R=301]

关于你的问题,符号^的意思是“匹配URL的开头”,符号$是“匹配URL的结尾”。最好通过例子来解释。
例如:^welcome/可以匹配URL /welcome/a/b/c/welcome/b/c/d等以/welcome开头的任何URL。
另外,welcome$可以匹配URL /a/b/welcome/a/something/welcome等以welcome结尾的任何URL。
你在问题中提供的第一个RewriteRules表示“一个有开头和结尾并且中间有内容的URL”,而第二个则表示“一个有一些文本然后结束的URL”。这两个表达式都非常通用,可以匹配任何你想要的内容。

很棒的代码。它很好地将我的旧域名重定向到新域名。谢谢。 - Nick321
我可以使用 RewriteRule .? http://www.newdomain.com%{REQUEST_URI} [L,R=301] 重定向所有旧域名页面到新域名吗? - Nick321
通过 RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$ [NC],你可以实现。 - rpkamp

2

尽可能使用起始和结束锚点(^$),例如^(.*)$,但在您列出的这两种情况下,两个规则都会表现相似


2
^$^(.*)$之间的确切区别是什么?我还看到一些人只写了(.*)而没有^$。这是什么意思? - ArrayOutOfBounds
5
^$ 表示一个空字符串,只匹配主页即 /。是的,使用 (.*)^(.*)$ 是相同的,但我更喜欢使用锚点 ^$ - anubhava
谢谢。.*.+ 代表什么意思? - ArrayOutOfBounds
1
在正则表达式中,.表示任何字符。.*表示0个或多个任意字符,而.+表示1个或多个任意字符。 - anubhava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接