0

使用是否正确

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

将所有页面从旧域重定向到新域(包括 404)?

我在我的一个 htaccess 中有它。它有效,但我不知道它是否正确。

4

2 回答 2

0

它会起作用,但这不是我会做的方式。意思是“ .?URL 包含 0 或 1 的任何东西”,这是匹配所有内容的一种有点奇怪的方式。

我接近它的方法是“捕获”匹配的 URL 并在目标中使用它。

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

在这里,.*表示“匹配任何内容”,^and$表示 URL 的开头和结尾,使其“匹配所有内容”,并且$1指的是在第一组(并且仅在这种情况下)括号中匹配的任何内容。

看起来更复杂,现在我看一下,但更类似于如果您只想匹配一些 URL 或以不同方式构造目标时所需的规则。

于 2013-05-15T16:05:13.550 回答
0

OP 使用 REQUEST_URI 的解决方案比使用常见的 ^(.*)$ 和 $1 更好,而且更可取。

原因:

  • REQUEST_URI 正确保留了缺少尾部斜杠的路径( $1 不这样做)。所以olddomain.com/path会重定向到newdomain/path完美。仅使用 $1olddomain.com/path/将重定向到,newdomain/path/但将删除缺少尾部斜杠的路径段。
  • REQUEST_URI 正确地保留了任何查询字符串,这需要使用 $1 解决方案附加一个 QSA 标志。

我建议只有一点改进:
使匹配模式更短。一个插入符号就足以匹配任何内容:

RewriteRule ^ http://www.newdomain.com%{REQUEST_URI} [L,R=301]
于 2016-04-13T09:21:00.320 回答