.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 301 将所有页面/文件(除了一个)重定向到新域?