HTTP 到 HTTPS 重写第一次不起作用

HTTP 到 HTTPS 重写第一次不起作用

大家好,我在运行 Apache 的 Debian 上重定向到 HTTPS 时遇到了一个奇怪的问题。

  • 当用户访问http://subdomain.url.nl第一次报告页面未找到。
  • 当用户访问 https 时,它可以起作用。
  • 然后用户关闭浏览器,再次启动浏览器,并转到 http(不使用 https),重定向突然开始起作用。

我使用这个重写规则。(*隐藏此帖子中的 IP 地址)

  <VirtualHost 10.*.*.*:80>
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
ReWriteRule ^/(.*) https://%{HTTP_POST}/$1 [NC,R,L]
</VirtualHost>

因此,只有当用户“第一次”通过 http 访问网站时,重定向才有效。有什么办法可以解决这个问题吗?

答案1

变量HTTP_POST不存在。你很可能指的是HTTP_HOST

RewriteEngine on
ReWriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R=301,L]

由于这是永久重定向,因此应返回响应代码 301,默认值为[R]302(暂时移动)。

还要注意,对 443 以外的端口的条件检查是不必要的,VirtualHost 仅绑定到端口 80。端口 443 上的请求永远不会到达它。

关于第二个请求的工作:您的 SSL 配置中是否启用了 HSTS?这可以解释为什么客户端在后续请求中会立即转到 HTTPS。

答案2

推荐的方式是使用Redirect虚拟主机内的选项这里解释。这是一个配置片段:

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName www.example.com
   Redirect permanent / https://secure.example.com/
</VirtualHost>

<VirtualHost _default_:443>
   ServerName secure.example.com
   DocumentRoot /usr/local/apache2/htdocs
   SSLEngine On
# etc...
</VirtualHost>

这会将所有请求重定向http://www.example.comhttps://secure.example.com

相关内容