301从主域(www和非www)重定向到子域
Posted
技术标签:
【中文标题】301从主域(www和非www)重定向到子域【英文标题】:301 Redirect from main domain (www and non-www) to subdomain 【发布时间】:2011-04-01 20:18:44 【问题描述】:我需要从 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]
【问题讨论】:
我只是出于学习目的比其他任何事情都更好奇,但是这种重定向有什么好处? 【参考方案1】:您也可以将它们压缩成一条规则:
RewriteCond %HTTP_HOST ^(www\.)?example\.com$ [NC]
RewriteRule ^ http://sub.example.com%REQUEST_URI [R=301,L]
Mark 关于/
的观点是一个重要的考虑因素。由于您在 .htaccess
中定义规则,因此输入(以及通过关联捕获的反向引用)不会以前导斜杠开头,因此在这种情况下您实际上确实需要一个明确的规则(就像您一样)。
因为无论如何我们只想要整个路径,所以在这个意义上使用%REQUEST_URI
更可靠,因为无论我们使用规则的上下文如何,它总是有一个前导斜杠。
【讨论】:
【参考方案2】:同时添加:
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
)。
【讨论】:
以上是关于301从主域(www和非www)重定向到子域的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess:将主域重定向到https:// www,子域重定向到https://(不带www)