\我差点把我的头发拉出去试图今晚解决这个问题。我希望有人可以帮助我。
我有一个站点的3个TLD,类似于以下内容:
它们都位于同一目录中。
我想设置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]
感谢您的时间,
凯西
答案 0 :(得分:4)
这个是基于你的例子,稍作修改:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC]
RewriteRule ^(.*) http://www.domain.com/$1 [R=301,NE,L]
NC
,R=301
和L
非常明显。 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