Apache的mod_rewrite到内部服务器的问题

我遇到了一些与Apache和mod_rewrite问题。 我正在运行的服务器在centos上使用apache。 同一台服务器作为虚拟机运行Windows。

我目前的设置允许我访问:

http://example.com在centos服务器上

使用以下configuration在虚拟机上的http://example.com/windows :

RewriteEngine On RewriteRule ^/windows(.*)$ http://192.168.56.2$1 [P] 

但是,访问http://example.com/windows时,所有请求都会被重写为GET请求,因此任何POST数据都将丢失。

反正有我保留我的POST数据?

任何帮助是极大的赞赏! 谢谢。

什么是302的样子? 这里有几个选项:它可能是Apache,或代理的服务器,或者在后端服务器上处理请求的应用程序的预期行为。

选项A

如果需要的话,Apache会发送一个302来添加一个结尾的斜线,但是由于这个资源匹配了一个代理规则,所以它不应该在意。

选项B

如果请求只针对http://example.com/windows ,那么请求将作为http://192.168.56.2发送到后端 – 这需要在IP成为有效请求之后有一个斜线,所以不需要web服务器可能会被指责为踢一个302添加一个。

选项C

请记住,redirect不一定表示POST请求中的失败情况 – 某些应用程序旨在执行此操作,以防止用户发生意外的双重post。 从细节看这里 。


做一些挖掘日志,看看它是什么。

噢,您的configuration容易受到CVE-2011-3368中描述的漏洞的攻击 – 例如http://example.com/[email protected]/index.html的请求会将请求发送到http://[email protected]/index.html – 192.168.56.2最终被视为用户规范,192.168.56.100被视为主机,攻击者可以到达您的代理可以看到的任何内部主机。

试试这个configuration – 如果上面的选项B是问题的话,这两个问题都应该修复尾部斜杠问题,以及解决您的漏洞风险:

 RewriteRule ^/windows/?(.*?)$ http://192.168.56.2/$1 [P]