使用.htaccess&mod_rewrite将“www”添加到HTTPSurl

我有这个困境。 通过以下代码,我可以在任何非SSLurl上强制使用SSL,但是当用户(以及Google的结果)将用户带到http://mysite.co.za时,我们遇到了问题,因为url会被重写到https://mysite.co.za

由于我的证书绑定到www.mysite.co.za这个事实,它会立即抛出一个安全错误,因为URL中缺less“www”。

有人可以指出一种方法,当域名开始HTTPS而不是HTTP时,将www添加到域?

非常感激。

而添加https://的当前代码如下所示:

RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTPS}s ^on(s)| RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

有人可以指出一种方法,当域名开始HTTPS而不是HTTP时,将www添加到域?

所以你想这个:

  • 如果主机不以www开头:
    • 如果连接是安全的,什么都不要做。 在这种情况下,你已经拧了,因为用户已经看到主机不匹配的警告。
    • 如果连接不安全,则重定向到https://www.% {HTTP_HOST}%{REQUEST_URI}

你目前的规则:

 RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTPS}s ^on(s)| RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

这个规则失败了,因为无论连接是否安全,它都会添加www。 此外,它保持原来的方式http(不转发https://)。

满足上述要求的规则是

 #if the host does not start with www. RewriteCond %{HTTP_HOST} !^www\. #and the connection is not secure RewriteCond %{HTTPS} ="" #forward RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301] 

L标志是不必要的,因为重定向结束了重写。

这不能回答你的问题,但这肯定是解决问题的方法:

来自Digicert的SSL证书将默认保护相同域的WWW和非WWW变体。 我不知道有任何其他的主流证书颁发机构 – Digicert SSL Plus