【问题标题】:301 Redirect from main domain (www and non-www) to subdomain301从主域(www和非www)重定向到子域
【发布时间】: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]

【问题讨论】:

  • 我只是出于学习目的比其他任何事情都更好奇,但是这种重定向有什么好处?

标签: .htaccess mod-rewrite redirect http-status-code-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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 2014-12-07
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      相关资源
      最近更新 更多