将一个TLD的所有页面redirect到另一个

我几乎把我的头发拉出来试图找出今晚。 我希望有人能帮助我。

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

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

他们都位于同一个目录。

我想设置301redirect,以便.org和.net的所有页面指向它们各自在.com位置的页面。

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

目前,我正在使用下面的代码,只将.net和.org主页redirect到.com主页。

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

感谢您的时间,

卡西

这个是基于你的例子进行小的修改:

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

NCR=301L非常明显。 NE是无逃生的,它防止查询字符串变量被两次转义。 ^(.*)在大多数情况下不需要/

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

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

写Cond还有很多其他的方法,这就是我的做法 – 一个积极的比较。 你的是一个负面的比较,但它的缺点是,如果有人不发送主机头将永久重定向,加上你不需要列出所有的域重定向。 你也可以添加一个规则来重定向没有www的.com,如果你想。

对于规则来说,这个技巧就是表达式中的() ,它捕获了稍后与$1一起使用的部分url

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

这将每个请求重定向到www.domain.com,包括查询字符串和请求 – 如果主机不是 http://www.domain.com