将https重定向到非www,将http重定向到www

7
我需要一组重定向来实现以下内容:
http://example.com 重定向到 http://www.example.com,同时将https://www.example.com 重定向到 https://example.com
当通过http访问站点时,我想强制使用域名前缀www
然而,SSL证书只能在没有www的情况下工作。
当通过https访问时,我不希望域名有www前缀。

1
你到底为什么想要那个? - Gerben
因为 SSL 证书仅针对 "mysite.com" 进行设置。 - Zarco
3
那么,为什么不将HTTP流量重定向到非www版本呢? - Gerben
2个回答

13
https://www.mysite.com重定向到https://mysite.com只能在客户端首次请求https://www.mysite.com之后发生。
为了使这个初始连接正常工作,https://www.mysite.com服务器必须具有www.mysite.com的有效证书,否则该连接甚至不会发生(并且服务器不会发送重定向响应)。
如果您仍然想要重定向,在同一台服务器上,您的服务器必须提供一个适用于要服务的主机名的有效证书。您应该获取一个带有两个主题备用名称DNS条目的证书:mysite.comwww.mysite.com;这将允许您使用同一证书为两个主机提供服务(然后在需要时使用重写规则)。
(如果您期望客户端支持,还可以使用两个不同证书的服务器名称指示,但通常是针对完全不同的主机名。)
当您申请其中一个时,CAs通常会颁发适用于mysite.comwww.mysite.com的有效证书,这是相当常见的,并且有时没有额外的费用。

0
将以下内容放入您的非 HTTPS 文档根目录的 .htaccess 文件中:
RewriteCond %{HTTP_HOST} ^mysite.com$
RewriteRule ^(.*)$ http://www.mysite.com/$1 [R]

并将此放置在您的HTTPS文档根目录中:

RewriteCond %{HTTPS} =on
RewriteCond %{HTTP_HOST} ^www.mysite.com$
RewriteRule ^(.*)$ https://mysite.com/$1 [R]

两个都不起作用?你确定你的 .htaccess 文件被读取了吗? - Ansari
经过进一步测试,是的,第一个可以工作。http://mysite.com 重定向到 http://www.mysite.com 但是 https://www.mysite.com 没有重定向到 https://mysite.com - Zarco
进一步测试...我添加了这两个,刚意识到https正在重定向到http。 - Zarco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接