【问题标题】:POST request getting converted to GET when URL rewriting is done in apache httpd在 apache httpd 中完成 URL 重写时,POST 请求被转换为 GET
【发布时间】:2014-12-30 22:26:26
【问题描述】:

我有一个 apache Web 服务器,它充当内部应用服务器的反向代理。我已经使用 ProxyPass 和 ProxyPassReverse 来实现这一点。我有多个上下文根映射到不同的应用程序。

我正在尝试从一个上下文的域名中删除上下文根,以便用户可以直接以https://mydomain.com 而不是https://mydomain.com/contextRoot 访问该网站。我添加了以下重写规则,而不是为此上下文的 proxypass 和 proxypassreverse 配置。

# redirecting old URL to new URL
RewriteRule ^/contextRoot(.*)$ https://mydomain.com$1 [L,R=301]

# proxying to internal app servers
RewriteCond %{REQUEST_URI} !^(/anotherContextRoot1.*)$
RewriteCond %{REQUEST_URI} !^(/anotherContextRoot2.*)$
RewriteRule .* http://10.1.0.1:8080/contextRoot%{REQUEST_URI} [L,P]

此配置适用于所有 http GET 请求。对于 POST 请求,会发生重定向,但后续调用会变为 GET。

请帮助我了解为什么会发生这种情况以及我该如何纠正。我还想了解是否有任何更多的重写规则配置,我已经添加以执行 proxypassreverse 在以前的配置中使用的操作。

【问题讨论】:

标签: apache mod-rewrite url-rewriting


【解决方案1】:

这个问题在这里得到了回答 https://softwareengineering.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect/99966#99966 - 这个答案的简短摘要

在 HTTP 1.1 中,实际上有一个状态码 (307),表示应该使用相同的方法重复请求并发布数据。

正如其他人所说,这里存在误用的可能性,这可能是许多框架在抽象中坚持使用 301 和 302 的原因。

【讨论】:

    【解决方案2】:

    我有同样的问题并检查了更多。这个问题在另一篇文章中得到解答:

    redirectmatch changes post to get

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      相关资源
      最近更新 更多