如何在Tomcat的RewriteValve中修改前置协议和主机

时间:2018-10-23 14:11:09

标签: tomcat url-rewriting

我正在Tomcat 8中使用RewriteValve重定向客户端请求,如下所示:

RewriteRule /login$ /~autoLogin [R,L]

这很好,但是我遇到的问题是,当使用重定向[R]时,重定向目标URL是通过在服务器前添加http://而不是客户端最初请求的内容(文档说[1]就是这种情况。

例如,当客户要求时

https://myserver.com/login我希望它重定向到 https://myserver.com/~autologin

但是,它实际上重定向到http://myserver.com/~autologin

如何配置/更改前置方式?

此刻,我正在通过将目标URL硬编码为

https://myserver.com/~autologin

但这是不可取的,因为我将此配置保留在版本控制中,并在多台服务器上使用它进行开发,测试,登台和生产。

1 个答案:

答案 0 :(得分:0)

事实证明,这不是RewriteValve的问题,而是我正在使用的服务器基础结构的副作用。

Tomcat服务器在AWS上的Elastic Load Balancer后面的EC2实例上运行。 ELB托管允许HTTPS请求的证书。但是,由于EC2实例不能直接使用证书,因此ELB上以HTTPS形式出现的请求将作为HTTP请求转发到Tomcat实例。 ELB将透明地协商证书交换和通信加密。

因此,对于RewriteValve,传入的请求是基于HTTP的,因此它以HTTP开头。