将一个TLD的所有页面重定向到另一个

时间:2011-10-27 01:19:13

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

\我差点把我的头发拉出去试图今晚解决这个问题。我希望有人可以帮助我。

我有一个站点的3个TLD,类似于以下内容:

  • www.domain.com
  • www.domain.org
  • www.domain.net

它们都位于同一目录中。

我想设置301重定向,以便.org和.net的所有页面都指向.com位置的各自页面。

例如,domain.net / topic / page以及www.domain.net/topic/page应永久重定向到www.domain.com/topic/page。

目前,我使用下面的代码,只将.net和.org主页重定向到.com主页。

RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule .?$ http://www.domain.com%{REQUEST_URI} [R=301,L]

感谢您的时间,

凯西

3 个答案:

答案 0 :(得分:4)

这个是基于你的例子,稍作修改:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [R=301,NE,L]

NCR=301L非常明显。 NE用于no-escape,它可以防止查询字符串变量被转义两次。 <{1}}在大多数情况下不需要^(.*)

注意:浏览器将缓存301个永久重定向响应,以便在测试时不时清除浏览器缓存。否则,您可能看不到所做更改的结果。

答案 1 :(得分:1)

RewriteCond %{HTTP_HOST}   domain\.(org|net) [NC]
RewriteRule ^/(.*)         http://www.domain.com/$1 [L,R=301]

还有很多其他方式来写Cond,这就是我的方式 - 一个积极的比较。你的是一个负面比较,但它的缺点是,如果某人没有发送主机头,它将永远重定向,在加号上你不需要列出所有要重定向的域。如果需要,您还可以添加规则以重定向.com而不使用www。

对于规则,技巧是表达式中的() - 这将捕获该部分网址,以便稍后使用$1

答案 2 :(得分:0)

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]

如果主机 www.domain.com

,这会将每个请求重定向到www.domain.com,包括querystring和request-uri