当前位置: 首页 > 知识库问答 >
问题:

htaccess重定向到https://www

戚俊人
2023-03-14

我有以下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。

共有3个答案

嵇昱
2023-03-14

如果您使用的是CloudFlare或类似的CDN,那么在这里提供的%{HTTPS}解决方案中会出现无限循环错误。如果您是CloudFlare用户,则需要使用以下选项:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
费锋
2023-03-14

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]
蔚弘量
2023-03-14

要首先强制使用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。我