.htaccess 301 将旧域上的所有页面重定向到新域上的单个页面

Posted

技术标签:

【中文标题】.htaccess 301 将旧域上的所有页面重定向到新域上的单个页面【英文标题】:.htaccess 301 redirect all pages on old domain to a single page on new domain 【发布时间】:2013-02-10 00:24:12 【问题描述】:

我希望将旧域上的每个页面重定向到新域上的单个页面。它还应该重定向 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 解决方案。

【问题讨论】:

【参考方案1】:

您可以在 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]

【讨论】:

适用于大多数页面,但不适用于 www.old.com/?string=1 第二种解决方案也不重定向 www.old.com/?string=1(相当于 www.old.com/index.php?string=1)。它确实重定向了所有以文件夹形式存在的 URL(www.old.com/folder/) @DanHorvat 如果将问号? 附加到新域,查询字符串将被删除RewriteRule .* http://www.new.com/? [L,R=301] 为了保留所有查询字符串,请在包含 RewriteRule 的行尾添加[QSA]【参考方案2】:

这个问题已经得到解答,但这里的代码完全包含有用的 cmets,因此人们可以在以后忘记它的作用时参考。

把它放在你的 .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]

【讨论】:

【参考方案3】:

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

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]

【讨论】:

以上是关于.htaccess 301 将旧域上的所有页面重定向到新域上的单个页面的主要内容,如果未能解决你的问题,请参考以下文章

htaccess 将旧域重定向到新域

我如何 .htaccess 301 将所有页面/文件(除了一个)重定向到新域?

使用 Apache 将旧域上的旧路径重定向到新域上的新路径

HTACCESS-将旧域重定向到新域

.htaccess 旧域到新域 301 重定向,但只有域,而不是页面

将旧域的所有网页重定向到新域索引