Apache上的重定向(维护POST参数)

时间:2013-06-25 10:36:13

标签: apache redirect httpd.conf

我在服务器上安装了Apache,我需要从http重定向到https。原因是我们的负载均衡器解决方案无法处理https,因此请求进入http,然后我们使用httpd.conf文件中的以下行将它们传输到https。

<VirtualHost 10.1.2.91:80>
     Redirect 302 /GladQE/link https://glad-test.com/GladQE/link.do
</VirtualHost>

这适用于GET请求,但POST请求将丢失在URL上传递的参数。执行此重定向和维护POST参数的最简单方法是什么?

我需要从http://glad-test.com/GladQE/link.dohttps://glad-test.com/GladQE/link.do来保持POST参数

由于

汤姆

3 个答案:

答案 0 :(得分:26)

您可以尝试使用HTTP状态代码307,RFC编译浏览器应该重复发布请求。 参考:http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

  

与历史上实施302的方式相反,请求   重新发出原件时不允许更改方法   请求。例如,应该使用另一个请求重复POST请求   POST请求。

要从302更改为307,请执行以下操作:

<VirtualHost 10.1.2.91:80>
     Redirect 307 /GladQE/link https://glad-test.com/GladQE/link.do
</VirtualHost>

答案 1 :(得分:16)

标准Apache重定向将无法处理POST数据,因为它们在URL级别上工作。 POST数据在请求正文中传递,如果您执行标准重定向,则会丢弃该数据。

您可以选择使用PHP脚本透明地转发POST请求,也可以使用Rewrite(mod_rewrite)和Proxy(mod_proxy)模块的组合,如下所示:

RewriteEngine On
RewriteRule /proxy/(.*)$ http://www.example.com/$1 [P,L]

P标志将请求传递给代理模块,因此任何以/proxy/开头的URL路径到达您的站点(通过GET或POST无关紧要)都将被透明地处理作为代理重定向到http://www.example.com/

供参考:

答案 2 :(得分:0)

您的面向公众的网站必须使用SSL来保护机密性,或者没有敏感数据通过它,并且您的网站不可能被用于sslstripping的lauinchboard(这是Google提供服务的一个很好的理由)通过HTTPS搜索结果。)

如果您没有加密浏览器和网站之间的流量,那么为什么要尝试在负载均衡器和网络服务器之间加密?如果您确实碰巧在负载均衡器之外有SSL终止(这是一种非常愚蠢的方法),那么在负载均衡器和Web服务器之间使用HTTPS远非有效。该问题还意味着许多其他安全问题,如会话固定/嗅探和SSLStripping漏洞。