代码之家  ›  专栏  ›  技术社区  ›  SimonDowdles

使用.htaccess&mod\u rewrite将“www”预先添加到HTTPS url

  •  1
  • SimonDowdles  · 技术社区  · 14 年前

    我对这件事进退两难。通过下面的代码,我可以在任何非SSL url上强制SSL,但是当用户(以及Google的结果)将用户带到 http://mysite.co.za https://mysite.co.za

    当域以HTTPS而不是HTTP开头时,有人能指出一种将www添加到域中的方法吗?

    RewriteCond %{HTTP_HOST} !^www\.
    RewriteCond %{HTTPS}s ^on(s)|
    RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Artefacto    14 年前

    当域以HTTPS而不是HTTP开头时,有人能指出一种将www添加到域中的方法吗?

    • 如果主机不是以www开头:
      • 如果连接安全,则不执行任何操作。在这种情况下,你已经被搞砸了,因为用户已经看到了主机不匹配警告。
      • 如果连接不安全,请重定向到 https://www.% {HTTP\u HOST}%{REQUEST\u 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

        2
  •  0
  •   Gareth    14 年前

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

    默认情况下,来自Digicert的SSL证书将保护同一域的WWW和非WWW变体。我不知道还有哪个主流的证书颁发机构会这么做- Digicert SSL Plus