所以我查看了其他类似的问题并提供了解决方案,但由于某些原因,它们中没有一个似乎起作用。首先,我的ELB已设置为
HTTP (incoming) -> HTTP (instance)
HTTPS (incoming) -> HTTP (instance)
因此,所有流量都应该通过端口80进入。这样可以正常工作,因为当我使用http://mydomain.com或https://mydomain.com访问我的网站时,即使我仅在端口80上有一个VirtualHost,它也能够显示。
问题出在尝试将所有http流量重定向到https上。我曾尝试基于端口进行重定向(检查是否为!443并重定向到https),但现在由于所有流量都是通过80进入,所以这种方式行不通。因此,我使用Apache服务器并拥有以下重写规则:
RewriteEngine on
RewriteCond %{HTTP_HOST} www.(.+) [OR,NC] # Added
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^/?(.*) https://mydomain.com%{REQUEST_URI} [L,R=301]
但它似乎从来没有起作用。我是否漏掉了其他行?有没有方法可以检查它是否满足该条件?我尝试将条件改为!https和http,但都没有起作用。
编辑:稍微修改了我的RewriteRule,现在仍然无法工作。我添加了一个额外的条件来重写www,那个有效。HTTP:X-Forwarded-Proto可能不存在或未由负载均衡器设置。
编辑:错误真的很愚蠢。我只是通过SSH连接到错误的实例。感谢您容忍我的愚蠢。