6

我希望将旧域上的每个页面重定向到新域上的单个页面。它还应该重定向 www 和非 www 版本。对域 old.com 的每个请求,无论它可能是什么,都应该指向 www.new.com 根。

old.com/1.php
www.old.com/2.php
old.com/2.php
old.com/links/index.php
old.com/about-us.html
old.com/?string=1

应该全部重定向到:

www.new.com/

我正在寻找 .htaccess 解决方案。

4

3 回答 3

18

您可以在 old.com 虚拟主机中使用 RedirectMatch

RedirectMatch permanent .* http://www.new.com/

Redirect将匹配的 URI 的尾随部分附加到重定向 URI,但您可以使用括号和引用RedirectMatch选择要传输的部分(如果有) 。$number

如果旧域和新域必须是磁盘上同一个文档根目录的别名,那么您可能必须使用 mod_rewrite

RewriteEngine on
RewriteCond %{HTTP_HOST} old\.com$
RewriteRule .* http://www.new.com/ [L,R=301]
于 2013-02-24T22:04:27.610 回答
4

这已经得到了回答,但这里的代码完全包含有用的注释,因此人们可以参考,以便他们以后忘记它的作用。

把它放在你的 .htaccess 文件中:

## Each and every page on old domain redirects to single page
## By appending question mark to new domain, query strings are removed
RewriteEngine on
RewriteCond %{HTTP_HOST} old\.com$
RewriteRule .* http://www.new.com/? [L,R=301]

您还可以重定向到另一个域上的子目录,就像我需要这样做的情况一样:

## Each and every page on old domain redirects to single page
## By appending question mark to new domain, query strings are removed
RewriteEngine on
RewriteCond %{HTTP_HOST} old\.com$
RewriteRule .* http://www.new.com/sub-directory/? [L,R=301]
于 2013-11-10T23:12:14.517 回答
0

这将处理您的所有重定向,包括查询字符串。对不起格式,我在打电话:)

RewriteCond %{HTTP_HOST} old\.com$ RewriteCond %{QUERY_STRING} .+
RewriteRule (.*) http://www.new.com$1?%{QUERY_STRING} [L,R=301,QSA]

RewriteCond %{HTTP_HOST} old\.com$
RewriteRule (.*) http://www.new.com$1 [L,R=301,QSA]
于 2013-02-24T23:52:44.697 回答