pan*_*nt0 7 http https amazon-web-services apache-2.2 amazon-elb
我需要将所有传入的 HTTP 流量重定向到我的弹性负载均衡器上的 HTTPS。
我厌倦了使用 Apache mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
Run Code Online (Sandbox Code Playgroud)
利用负载均衡器添加的 X-Forwarded-Proto 标头,此规则应指示用户浏览器请求同一 URL 的 HTTPS 版本。
到目前为止它不起作用(没有重定向发生)。
我究竟做错了什么?
有一个更好的方法吗?
编辑:
这最终奏效了:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !=https
RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)
因此,我假设您已将 ELB 设置为接受 HTTP/80 和 HTTPS/443 上的流量,但将所有端口转发到 HTTP。
如果你想使用你的方法(这很聪明),你确定你得到的不是%{X-Forwarded-Proto}-HTTP:前缀对我来说看起来很奇怪。除此之外,这在我看来是正确的。
如果这是在虚拟主机或主服务器配置中并且仍然无法正常工作,您可以添加
RewriteLog rewrite-log
RewriteLogLevel 3
Run Code Online (Sandbox Code Playgroud)
然后查看文件rewrite-log以查看实际发生的情况。这个文件可能非常冗长,从较低的级别开始。无法从.htaccess文件启动日志记录。
(我建议您在 上设置标志,RewriteRule [R=301,L]这将导致服务器发回 301 响应,这会告诉搜索引擎将重定向视为永久性的,并相应地更新其链接。)
| 归档时间: |
|
| 查看次数: |
9771 次 |
| 最近记录: |