关于使用Rewriterule。? &安培; {REQUEST_URI}变量将所有旧域重定向到新域

时间:2013-05-15 15:58:23

标签: apache .htaccess mod-rewrite http-status-code-301 http-redirect

使用

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

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

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

2 个答案:

答案 0 :(得分:0)

它会起作用,但这不是我做的方式。 .?表示“网址包含0或1的任何内容”,这是匹配所有内容的奇怪方法。

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

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

此处,.*表示“匹配任何内容”,^$代表网址的开头和结尾,使其“匹配所有内容”,{{1} }指的是第一个(在这种情况下只有)括号中匹配的内容。

似乎更复杂,现在我看一下,但是如果你只想匹配某些网址,或者以不同的方式构建目标,则更类似于你需要的规则。

答案 1 :(得分:0)

使用REQUEST_URI的OP解决方案很好,比使用经常看到的^(。*)$和$ 1更好。

原因:

  • REQUEST_URI正确保留缺少尾部斜杠的路径($ 1不会这样做)。因此olddomain.com/path将完全重定向到newdomain/path。仅使用1美元olddomain.com/path/将重定向到newdomain/path/,但会删除缺少尾部斜杠的路径段。
  • REQUEST_URI正确保留了任何查询字符串,这需要额外的QSA标记和$ 1解决方案。

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

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