如何重定向 HTTP post 请求

如何重定向 HTTP post 请求

你好,我目前正在我的 apache httpd.conf 文件中使用以下代码从 HTTP 重定向到 HTTPS

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

这会重定向 get 请求中的参数,但不会重定向 post 请求中的参数。从此处的阅读来看,这似乎需要使用 mod_rewrite 来完成。

有人可以帮我进行一些修改吗,以便当使用帖子参数点击左侧的链接时,它会重定向到右侧的链接并且参数完整?

非常感谢

汤姆

答案1

看起来像 Apache 配置?指定这样的内容是个好主意。不过标签可以确认这一点。

该配置仅在连接到端口 443 时运行,因此无法重定向HTTP。

您无法对 POST 请求执行 30[12] 重定向并保留参数,除非您将请求转换为 GET 并将参数写入 URL。不推荐这样做。

您可以代理请求,但我不确定这是否能解决您的问题。

如果用户已经通过未加密的连接通过 POST 提交了数据,并且您关心加密,那么最好还是让该请求中断,以便它被注意到并修复。您应该修复表单目标,并确保表单本身(或其中包含 AJAX 的页面或其他内容)通过 HTTPS 发送给用户。

更新

鉴于 shawsy 说过问题在于浏览器无法与服务器建立 HTTPS 连接,重定向肯定不是我们想要的。相反,您需要代理请求:

<VirtualHost 10.1.2.91:80>
  # http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass
  ProxyPass /GladQE/link https://glad-test.com/GladQE/link.do
  ProxyPass /GladQE/retrieve https://glad-test.com/GladQE/retrieve.do
</VirtualHost>

您也可以使用 mod_rewrite 和 RewriteRule 来实现。

如果您要更改域名,则需要解决一些其他问题,但我认为这里的情况并非如此。


顺便说一句,我个人不喜欢将主机名或 IP 地址放在服务器的 /etc/hosts 文件以外的任何地方。如果您在 hosts 文件中使用诸如“web”和“mysql”之类的名称(它们定位服务而不是机器),并在 apache 和其他文件中引用这些名称,那么您可以更轻松地在机器之间移动配置,因为您知道只需查看 hosts 文件中的内容即可。

答案2

您可以使用 307 重定向来保留方法。从维基百科

在这种情况下,应使用另一个 URI 重复请求;但是,将来的请求仍应使用原始 URI。与历史上的 302 实现方式不同,重新发出原始请求时不允许更改请求方法。例如,应使用另一个 POST 请求重复 POST 请求。

相关内容