使用.htaccess&amp ;;将“www”添加到HTTPS网址。 mod_rewrite的

时间:2010-05-25 06:53:28

标签: apache .htaccess mod-rewrite

我对这个问题感到困惑。使用以下代码,我可以在任何非SSL网址上强制使用SSL,但是当用户(以及Google的结果)将用户带到http://mysite.co.za时,我们会遇到问题,因为网址会被重写为{{3 }}

由于我的证书已绑定到www.mysite.co.za,它会立即引发安全错误,因为网址中缺少“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]

2 个答案:

答案 0 :(得分:1)

  

有人指出在域名以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标志是不必要的,因为重定向结束重写。

答案 1 :(得分:0)

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

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