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)

.htaccess - 将旧网站重定向到主域,但也将一些内容重定向到主域的子域

如何将任何子域请求重定向到asp.net中的主域

301 在 Django 中重定向 www 子域

域重定向到www时如何将www子域重定向到非www

将子域重定向到主域上的文件夹