HTTP到HTTPS重写不能在第一次工作

我所有,我有一个奇怪的问题redirect到运行Apache的Debian上的HTTPS。

  • 当用户第一次访问http://subdomain.url.nl时,会报告一个未find的页面。
  • 当用户访问https时,它可以工作。
  • 然后用户closures浏览器,再次启动浏览器,并转到http(没有https),redirect突然工作。

我使用这个重写规则。 (*隐藏在这个职位的IP地址)

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

所以,只有用户第一次通过http访问该站点,redirect不起作用。 任何想法如何解决这个问题?

variablesHTTP_POST不存在。 你最可能的意思是HTTP_HOST

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

由于这是一个永久redirect,响应代码301应该被返回, [R]的默认值是302(临时移动)。

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

关于正在工作的第二个请求:您的SSLconfiguration中是否启用了HSTS? 这可以解释为什么客户端会马上转到HTTPS来处理后续的请求。

build议的方法是在虚拟主机内部使用Redirect选项,如此处所述。 这是一个configuration片段:

 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> 

这会将所有请求redirect到http://www.example.comhttps://secure.example.com