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

sha*_*wsy 16 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>
Run Code Online (Sandbox Code Playgroud)

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

我需要从http://glad-test.com/GladQE/link.do到这里https://glad-test.com/GladQE/link.do维护POST参数

谢谢

汤姆

Lor*_*enz 27

您可以尝试使用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>
Run Code Online (Sandbox Code Playgroud)

  • 实际上,HTTP重定向308应该在这里应用,因为OP希望后续请求被发布到HTTPS URI. (2认同)
  • 并且当前所有浏览器均不支持 HTTP 308 状态代码。因此,请改用307。资料来源:http://greenbytes.de/tech/tc/httpredirects/#t308methods (2认同)

dez*_*lov 18

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

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

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

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

供参考:

  • 完美,对我有效-对https进行此操作时,您需要在配置中添加SSLProxyEngine (2认同)