我几乎把我的头发拉出来试图找出今晚。 我希望有人能帮助我。
我有一个站点的3个TLD,类似于以下内容:
他们都位于同一个目录。
我想设置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]
NC
, R=301
和L
非常明显。 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