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

时间:2010-08-20 19:34:52

标签: .htaccess mod-rewrite redirect http-status-code-301

我需要从mydomain.com或www.mydomain.com等主域重定向到sub.mydomain.com - 这需要适用于所有请求,所以mydomain.com/whatever转到sub.mydomain.com /不管。

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

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

2 个答案:

答案 0 :(得分:3)

您也可以将它们压缩为一个规则:

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

马克关于/的观点是一个重要的考虑因素。由于您在.htaccess中定义规则,输入(以及通过关联捕获的反向引用)不会以前导斜杠开头,因此在这种情况下您实际上需要一个明确的(就像您所拥有的那样)。

因为我们只想要整个路径,所以在这种意义上使用%{REQUEST_URI}更可靠,因为它总是会有一个前导斜杠,无论我们使用规则的上下文如何。

答案 1 :(得分:2)

另外添加:

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

还有一点需要注意的是,您可能不希望/中的最后RewriteRule,因为它会向重定向的网址添加两个斜杠(例如http://mydomain.com/foo.html变为{ {1}})。