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

Nic*_*321 5 .htaccess mod-rewrite redirect http-status-code-301

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

之间有什么不同

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

RewriteRule (.*)$ http://mynewdomain.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

谢谢你。

rpk*_*amp 7

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

RewriteRule .? http://www.newdomain.com%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)

至于你的问题,意思^是“在 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”。这两个表达式都非常通用,可以匹配你扔给它的任何东西。


anu*_*ava 2

尽可能使用开始和结束锚点(^$)总是更好^(.*)$,但在您列出的两种情况下,两个规则的行为相似

  • `^$` 表示仅匹配主页的空白字符串,即 `/` 是的,使用 `(.*)` 与 `^(.*)$` 相同,但我更喜欢使用锚点 `^` 和 `$ ` (5认同)
  • `^$` 和 `^(.*)$` 之间的确切区别是什么?我还看到有些人只写“(.*)”,而不写“^”或“$”。这是什么意思? (2认同)