我有以下htaccess代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
我希望我的站点被重定向到https://www.
使用HTTPS,并强制执行www.
子域,但当我访问http://www.
(没有HTTPS),它不会将我重定向到https://www
使用HTTPS。
如果您使用的是CloudFlare或类似的CDN,那么在这里提供的%{HTTPS}解决方案中会出现无限循环错误。如果您是CloudFlare用户,则需要使用以下选项:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Michal的答案对我来说很有用,尽管有一点修改:
问题:
当你有一个单一的站点安全证书时,一个试图在没有https://www.(或你的证书覆盖的任何域名)的情况下访问你的页面的浏览器会在收到重定向到安全和正确的https页面之前显示一个丑陋的红色警告屏幕...
解决方案
首先使用重定向到www(或证书覆盖的任何域),然后才使用https重定向。这将确保您的用户不会遇到任何错误,因为您的浏览器会看到不包含当前url的证书。
#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
要首先强制使用HTTPS,必须将正确的环境变量%{HTTPS}勾选为off
,但上面的规则会在www.
前面加上前缀,因为您有第二条规则要强制www.
,所以不要在第一条规则中使用它。
RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
当使用某种形式的代理时,客户端通过HTTPS连接到代理、负载均衡器、乘客应用程序等。,%{HTTPS}
变量可能永远不会在上,并导致重写循环。这是因为即使客户端和代理/负载均衡器使用HTTPS,应用程序实际上仍在接收纯HTTP流量。在这些情况下,检查X-Forwarded-Proto
标头,而不是%{HTTPS}
变量。这个答案显示了适当的过程
我的一个域也有类似的问题。我为裸域和www域都安装了SSL证书。 现在,然而我想把裸体http://domain.com和https://domain.com都重定向到https://www.domain.com. 我在我的.htaccess中有这个规则,但当您使用https://domain.com,但是,当访问时http://domain.com,它重定向到http://www.domain.
我想将任何不安全的请求重定向到https,并确保url始终使用“www”。这就是我所拥有的,但似乎不起作用。我错过了什么?
我正在尝试将所有http流量重定向到https。我尚未在服务器上安装SSL证书,并且正在使用cloudflare灵活SSL选项。 以下代码工作文件 但这让http://www.example.com转向了https://example.com 但是当我添加这个 重定向所有非www网址,如http://example.com到https://example.com 网站没有加载,并给我一个错误,说浏
问题内容: 我有一些路线的角度应用程序,例如: 使用angular的html5路由模式,当您从应用程序内单击指向链接的链接时,这些链接可以正确解决,但是当您进行硬刷新时,这些链接当然会出现404错误。为了解决这个问题,我尝试实现基本的htaccess重写。 这适用于角度请求,但是当我尝试在我的域内加载脚本或进行ajax调用时,例如: 该脚本不会加载-它的请求被重定向,并且它尝试加载index.ht
隐私设置->清除浏览数据(从时间开始) https/ssl->管理证书->删除所有项(包括证书) 检查没有书签。 Firefox也有类似的问题,但它的解决方案不适用于Chrome。有人对我能做些什么有什么建议吗?提前感谢您的帮助!
我正在使用Firefox,在设置服务器时,我一直在摆弄重定向。现在,Firefox已经缓存了从http://example.com/到https://example.com/和从http://sub.example.com/到https://sub.example.com/的301重定向。 我已经尝试了以下几件事: null 我的Firefox版本是38.0.1,我使用的是Windows8.1。我