我遇到了一些与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]