这个问题发生在你:
curl -v -H "Host: www.example.com:80" -X GET -i http://www.example.com
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]