Apache返回错误的位置标题

这个问题发生在你:

  1. 根据包含端口的头“Host”发出请求,例如“Host:www.example.com:80”,根据https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html #sec14.23 。 你可以用curl来实现curl -v -H "Host: www.example.com:80" -X GET -i http://www.example.com
  2. 服务器发出redirect到https的请求,在我的情况下使用下面的RewriteRule
 RewriteCond%{HTTPS}closures
 RewriteRule(。*)https://%{HTTP_HOST}%{REQUEST_URI} [R = 301,L]

我注意到响应的“Location”头还包含了端口,和请求的“Host”头中指定的一样。 所以服务器会以“Location: https : //www.example.com : 80 ”来回应,这是错误的。

这发生在“Apache / 2.4.7(Ubuntu)”,但我注意到这个问题也与清漆caching服务器。 为什么这样做? 有没有办法纠正这一点?

HTTP_HOST是指主机:指定的头,所以你的configuration按照预期的方式工作。

如果你愿意的话,你可以剥离端口,或者通过匹配并使用反向引用来指定另一个:

删除端口,默认为https:

 RewriteCond %{HTTP_HOST} ^([^:]+)(:[0-9]+)?$ RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L] 

将端口改为别的(这里是8443):

 RewriteCond %{HTTP_HOST} ^([^:]+)(:[0-9]+)?$ RewriteRule ^ https://%1:8443%{REQUEST_URI} [R=301,L]