【问题标题】:Force non-www and https via htaccess通过 htaccess 强制非 www 和 https
【发布时间】:2011-09-14 21:17:21
【问题描述】:

我正在尝试强制将用户重定向到非 www 网站,并强制 https。

当输入 http 时,我已经完成了这项工作,但不强制使用 https。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://site.com\.net/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

关于我做错了什么有什么想法吗?

【问题讨论】:

    标签: .htaccess mod-rewrite https no-www


    【解决方案1】:

    试试这个规则:

    RewriteCond %{HTTP_HOST} ^(www\.)(.+) [OR]
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP_HOST} ^(www\.)?(.+)
    RewriteRule ^ https://%2%{REQUEST_URI} [R=301,L]
    

    【讨论】:

    • 当我尝试访问:https://www.mydomainname.co.uk 使用上面接受的答案中的 htaccess 时,我从浏览器收到旧的“已连接不受信任”消息。 http://mydomainname.co.ukhttp://www.mydomainname.co.uk 都可以重定向。我的证书是为mydomainname.co.uk 生成的。有什么想法(或您需要的更多信息)?
    • @Jon:TLS/SSL 层位于 HTTP 之上(HTTPS 也称为“HTTP over TLS/SSL”)。因此,TLS/SSL 连接已建立,证书在传递给 HTTP 之前经过验证,并发生 HTTP 重定向。你无法解决这个问题。
    • 感谢您的更新,只是为了确认一下 - 有没有解决方法吗? (完全没有,或者你知道吗?)
    • @Jon:不,据我所知没有解决方案。
    • 这会为我生成一个重定向循环。我发现这个答案可行:stackoverflow.com/a/21467534/298218
    【解决方案2】:

    基于 Gumbo 的评论:“TLS/SSL 连接已建立,证书在传递给 HTTP 和 HTTP 重定向发生之前经过验证” 我试了一下(似乎可行):

    RewriteEngine On 
    RewriteCond %{SERVER_PORT} 80 
    RewriteRule ^(.*)$ https://www.blahblah.com/$1 [R,L]
    
    RewriteCond %{HTTP_HOST} ^www\.blahblah\.com [NC]
    RewriteRule ^(.*)$ https://blahblah.com/$1 [L,R=301]
    

    如果这种方法有问题,请告诉我。

    【讨论】:

      【解决方案3】:

      唯一对我有用的规则如下

      # match any URL with www and rewrite it to https without the www
          RewriteCond %{HTTP_HOST} ^(www\.)(.*) [NC]
          RewriteRule (.*) https://%2%{REQUEST_URI} [R=301,L]
      
      # match non https and redirect to https
          RewriteCond %{HTTP:X-Forwarded-Proto} !https
          RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
      

      顺序很重要,它在某些情况下会阻止第三次重定向。

      【讨论】:

        【解决方案4】:

        使用此代码,我从 http 和 www 以及无 www 重定向到 https 无 www。请注意在 htaccess 中插入代码的位置很重要:

        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
        
        RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
        RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
        

        【讨论】:

          猜你喜欢
          • 2018-05-04
          • 2015-05-10
          • 1970-01-01
          • 2016-04-05
          • 1970-01-01
          • 2019-09-08
          • 1970-01-01
          • 2013-05-31
          • 2011-06-17
          相关资源
          最近更新 更多