首先,感谢您花时间回答我的问题。
我正在尝试将所有流量从 http:// 和 https:// 转发到“https://www.[domain].com/[etc]”,目前我能够强制所有“www.”流量到“https://www.”,使用以下 httpd.conf 中的设置:
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://{%SERVER_NAME}%{REQUEST_URI}
</VirtualHost>
不幸的是,此设置不一致。例如,如果我在浏览器地址栏中输入“https://[domain].com”,它不会重定向。在某些浏览器上,“http://[domain].com”也会重定向到非 www 的“https://[domain].com”。
长话短说,我在 httpd.conf 文件中设置从任何域前缀到 Amazon EC2 实例上的“https://www”的正确重定向时遇到了麻烦。如果您能在这里帮助我,我将不胜感激。再次感谢您的时间。
编辑:还有另一个问答介绍了一般重写规则,但是该答案未涵盖一些针对 Amazon EC2 (ELB) 的特定规则。坦率地说,我不确定 Amazon EC2 细节是否适用于我的问题,但我拥有的代码 (x-forwarded-proto) 特定于 ELB。
不管怎样,我之所以问这个问题是因为我的所有资源都已经用尽了。如果我在其他地方找到(或找到)答案,我会很乐意用信息和链接更新我的问题。
编辑2: 以下代码从 [domain].com、http://[domain.com] 和 http://www.[domain].com 重定向到 https://www.[domain].com。不幸的是,https://[domain].com 仍然没有重定向。
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://{%SERVER_NAME}%{REQUEST_URI}
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</VirtualHost>
我是否需要为 https:// 域名重定向设置不同的 VirtualHost?
答案1
这将启用重写功能:
RewriteEngine On
这将检查以确保连接还不是 HTTPS:
RewriteCond %{HTTPS} !=on
此规则将把用户从其原始位置重定向到相同的位置:
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
前导斜杠是可选的,以便它可以在 httpd.conf 位置工作但使用 HTTPS。