Apache Mod_Rewrite - 重定向丢失 POST 数据 - 405 错误

问题描述 投票:0回答:3

Stackoverflow 用户,

我有一个 Apache 应用程序,需要接受发布到以下路径的数据:

/sample/HostChange/Submit
/sample/HostChange/SubmittoAPI

我目前正在使用以下 301 重定向规则。这不是我想要的,因为 POST 被重定向,而第二个请求是 GET 丢失所有数据。我看到 301 请求转到正确的 url,但第二个请求是 GET 并导致 405 响应代码。

.htaccess:

RewriteEngine On
Redirect 301 /sample/HostChange/Submit /event
Redirect 301 /sample/HostChange/SubmittoAPI /date

我确定使用重定向是问题所在。有人可以帮助我找出我需要使用的正确 RewriteCondition 将这些 POST 命中重定向到新路径,但保持数据提交到应用程序。

谢谢你。

apache mod-rewrite http-status-code-301 http-status-code-405
3个回答
0
投票

我认为您不能重定向 POST(作为 POST)。浏览器不会再次发布数据。

您必须使用 Javascript 输出一些 HTML,以使浏览器将数据重新发布到新的 URL。

或者不进行重定向,而是让一些服务器端代码首先接受 POST 数据,然后以某种方式在内部分派它(可能在 URL 中使用识别令牌进行重定向)。

或者如果数据很短,请重新编写 URL 以包含数据作为查询参数。


0
投票

以下内容应该可以工作,我目前不在 apache 实例周围,因此没有尝试正则表达式,但请检查重写日志并查看其行为。

RewriteEngine On
RewriteLog /var/log/httpd/rewrite.log
RewriteLogLevel 9
RewriteCond %{REQUEST_URI} /sample/HostChange/Submit
RewriteRule ^/sample/HostChange/Submit(.*) /event/$1 [P,L]

0
投票

我遇到了同样的问题,对我来说,它没有帮助真正重定向请求,而是重写它。我现在不知道这是否适用于您的问题。

以下是详细信息,它对我有用: PHP 重写 url 并保留发布的数据

© www.soinside.com 2019 - 2024. All rights reserved.