我在使用 apache 和 mod_rewrite 时遇到了一些问题。我运行的服务器在 centos 上使用 apache。同一台服务器正在将 Windows 作为虚拟机运行。
我当前的设置允许我访问:
http://example.com在 centos 服务器上
http://example.com/windows在虚拟机上使用以下配置:
RewriteEngine On
RewriteRule ^/windows(.*)$ http://192.168.56.2$1 [P]
然而,当访问http://example.com/windows所有请求都被重写为 GET 请求,因此任何 POST 数据都会丢失。
有什么方法可以让我保留我的 POST 数据吗?
非常感谢您的帮助!谢谢。
答案1
302 是什么样子的?这里有几个选项:它可能是 Apache,或者是被代理的服务器,或者是在后端服务器上处理请求的应用程序的预期行为。
选项 A:
如果需要,Apache 将发送 302 来添加尾随斜杠,但由于此资源与代理规则匹配,因此它不必在意。
选项 B:
如果请求只是http://example.com/windows
,那么请求就会被发送到后端http://192.168.56.2
- 这需要在 IP 后有一个斜杠才能成为有效请求,因此不能指责任何 Web 服务器返回 302 来添加一个。
选项 C:
请记住,重定向并不一定表示请求失败POST
- 有些应用程序设计为这样做,以防止用户意外重复发布。请参阅此处详细信息。
深入挖掘日志并查看它是哪一个。
哦,你的配置很容易受到CVE-2011-3368-例如,对 的请求将发送到- 192.168.56.2 最终被视为用户规范,192.168.56.100 被视为主机,攻击者可以访问您的代理可以看到任何内部主机。http://example.com/[email protected]/index.html
http://[email protected]/index.html
尝试此配置 - 如果上面的选项 B 是问题所在,这应该既可以修复尾随斜杠问题,又可以解决您暴露于漏洞的问题:
RewriteRule ^/windows/?(.*?)$ http://192.168.56.2/$1 [P]