使用 mod_rewrite 和 htaccess 将主域重定向到 https,但将所有子域重定向到 http

Redirect Primary Domain to https but all Sub-domains to http with mod_rewrite and htaccess

详情

我有一个商业主机 gator 帐户..不是吹牛..它带有免费的私人 SSL 和 IP。我是 运行 一个 wordpress MU 安装,它使用子域设置并通过他们提供的插件设置域映射。

假设您对 Worpress MU 一无所知...基本上,Wordpress MU 允许您在单个 Wordpress 安装下创建多个自托管博客。我有一个通配符子域设置来捕获所有 sub.domain.com 请求,并且 Wordpress MU 做了一些巫术将其重定向到正确的目的地。

私有 SSL 是免费的,因此我现在不会 shell 寻求通配符 SSL,但我知道这是一个选项。话虽如此,当我从主域上的 https 单击任何 link 到子域时,https 会固定到 URL。

谁能帮我做以下事情?

(请注意:为了 post 我的问题,我必须在下面的 http(s):// 和 www 之间添加 space 以打破 links)

对于主要 "blog" url 我希望示例 www.domain.com 和 domain.com 都重定向到安全的 https,结果为 https:// www.domain.com

对于 "wildcard" 子域 "sub-blog" url 我想要示例 sub.domain.com 和 https:// sub.domain.com 从 ssl 重定向到http 结果为 http:// sub.domain.com

代码示例将不胜感激,一个详细的(虚拟的)教程让我可以理解正在发生的事情会很棒。我是 mod_rewrite 的新手,我的技能水平仅限于基本的 301 重定向。

谢谢

您可以在根目录中使用它 .htaccess:

RewriteEngine on 

# redirect to https www
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)(domain\.com)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [R=301,L]

# redirect to http subdomain
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^((?!www).+\.domain\.com)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]