通过 htaccess 强制非 www 和 https
Posted
技术标签:
【中文标题】通过 htaccess 强制非 www 和 https【英文标题】:Force non-www and https via htaccess 【发布时间】: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]
关于我做错了什么有什么想法吗?
【问题讨论】:
【参考方案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.uk
和 http://www.mydomainname.co.uk
都可以重定向。我的证书是为mydomainname.co.uk
生成的。有什么想法(或您需要的更多信息)?
@Jon:TLS/SSL 层位于 HTTP 之上(HTTPS 也称为“HTTP over TLS/SSL”)。因此,TLS/SSL 连接已建立,证书在传递给 HTTP 之前经过验证,并发生 HTTP 重定向。你无法解决这个问题。
感谢您的更新,只是为了确认一下 - 有没有解决方法吗? (完全没有,或者你知道吗?)
@Jon:不,据我所知没有解决方案。
这会为我生成一个重定向循环。我发现这个答案可行:***.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]
【讨论】:
以上是关于通过 htaccess 强制非 www 和 https的主要内容,如果未能解决你的问题,请参考以下文章
使用 .htaccess 为 CloudFlare 用户强制使用 HTTPS 和非 WWW
通过 htaccess 将所有 http 和 https 非 www URL 重定向到 https://www.xyz.com
对使用 .htaccess 输入的任何 URI 强制使用 SSL 和 www 子域?