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

ee7vknir  于 2022-12-14  发布在  Apache
关注(0)|答案(3)|浏览(226)

堆栈溢出用户,
我有一个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吗?我需要使用这个RewriteCondition来将这些POST命中重定向到新的路径,同时保持数据提交到应用程序。
非常感谢。

m4pnthwp

m4pnthwp1#

我不认为你可以重定向一个POST(作为一个POST)。浏览器只是不会再次发布数据。
您必须使用Javascript输出一些HTML,以使浏览器将数据重新POST到新的URL。
或者不进行重定向,而是让一些服务器端代码首先接受POST数据,然后以某种方式在内部调度它(可能使用URL中的标识标记进行重定向)。
或者,如果数据较短,则重写URL以将数据作为查询参数包括在内。

vaj7vani

vaj7vani2#

下面的一些东西应该可以工作,我现在没有一个apache示例,所以没有尝试regex,但是请检查重写日志,看看它是如何工作的。

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

0s0u357o3#

我遇到了同样的问题,对我来说,它并没有帮助真正重定向请求,而是重写它。我不知道这是否适用于你的问题。
下面是一些细节,我也很满意:PHP Rewrite url and preserve posted data

相关问题