301从主域(www和非www)重定向到子域

问题描述:

我需要从像mydomain.com或www.mydomain.com这样的主域重定向到sub.mydomain.com - 并且这需要适用于所有请求,所以mydomain.com/whatever去sub.mydomain.com/whatever。301从主域(www和非www)重定向到子域

我试过这个,只在主域适用于非www:

RewriteCond %{HTTP_HOST} ^mydomain.com [NC] 
RewriteRule ^(.*)$ http://sub.mydomain.com/$1 [L,R=301] 
+0

我更好奇的只是为了学习的目的而不是其他任何事情,但这种重定向的好处是什么? – JM4 2011-02-22 16:34:52

你可以凝聚成一个单一的规则,以及:

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

马克的有关/点是一个重要的考虑因素。虽然你在.htaccess中定义了规则,但输入(以及通过关联获取的反向引用)不会以一个前导斜杠开始,所以在这种情况下你确实需要明确的一个(就像你有的那样)。

因为我们只是想整个路径无论如何,使用%{REQUEST_URI}是在这个意义上更可靠,因为它总是有一个斜线,无论我们使用在规则范围内的。

另外补充:

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

一件事还需要注意的是,你可能不想要在RewriteRule中最后一个/,因为它会向重定向的URL添加两个斜线(例如,http://mydomain.com/foo.html变为http://sub.mydomain.com//foo.html)。