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

Posted

技术标签:

【中文标题】RewriteRule ^(.*)$ 和 RewriteRule (.*)$ 之间的区别【英文标题】:difference between RewriteRule ^(.*)$ & RewriteRule (.*)$ 【发布时间】:2013-05-07 23:21:22 【问题描述】:

当将所有页面从旧域移动到新域时,我注意到有些人添加了一个 ^ 而其他不在 rewriterule 中

有什么区别

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

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

谢谢。

【问题讨论】:

【参考方案1】:

他们都错了。不需要在反向引用中匹配任何内容,因为 Apache 有一个用于当前 URL 的内置变量:%REQUEST_URI

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

至于您的问题,^ 的含义是“匹配 URL 的开头and$”是“匹配 URL 的末尾”。这可能是最简单的例子。

^welcome/ 匹配 url /welcome/a/b/c、/welcome/b/c/d 等,任何以 /welcome 开头的内容

welcome$ 匹配 /a/b/welcome、/a/something/welcome 等,任何以 'welcome' 结尾的东西

您在问题中提出的第一个 RewriteRules 是“一个有开始和结束以及介于两者之间的 URL”,而第二个是“一个有一些文本然后结束的 URL”。这两个表达式都非常通用,可以匹配你扔给它的任何东西。

【讨论】:

伟大的路线。将我的旧域重定向到新域非常有用。谢谢。 我可以使用 RewriteRule 吗? newdomain.com%REQUEST_URI [L,R=301] 将所有页面从旧域重定向到新域? 加上RewriteCond %HTTP_HOST ^www\.olddomain\.com$ [NC],是的,你可以。【参考方案2】:

最好尽可能使用开始和结束锚点(^$),例如 ^(.*)$,但在您列出的 2 种情况下,两条规则将表现相似。 p>

【讨论】:

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

以上是关于RewriteRule ^(.*)$ 和 RewriteRule (.*)$ 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess RewriteRule 导致 403 Forbidden

动态网页转伪静态

将example.com/section.php?username=xyz重写为example.com/xyz/section

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

ibatis 中 $与#的区别

.htaccess和RewriteRule表达式