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

Posted

技术标签:

【中文标题】Apache Mod_Rewrite - 重定向丢失 POST 数据 - 405 错误【英文标题】:Apache Mod_Rewrite - Redirect losing POST data - 405 error 【发布时间】:2012-12-08 14:49:52 【问题描述】:

*** 用户,

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

/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 命中重定向到新路径,但保留提交给应用程序的数据。

非常感谢。

【问题讨论】:

¿您尝试过使用 mod-rewrite 吗?我问的原因是在重定向 (httpd.apache.org/docs/2.2/mod/mod_alias.html) 指令"The old URL-path is a case-sensitive (%-decoded) path..." 中,这可能正在修改 POST,这反过来可能会影响下一个 GET。只是一个想法,但如果是这种情况,您应该尝试改用 mod-rewrite。 除非我遗漏了什么,否则您使用的是重定向,这是一个mod-alias 指令。我的意思是 RewriteRule 这是一个mod-rewrite 指令。 哦,是的。我的错。我需要使用 mod_redirect 来完成这项工作。你对 RewriteCond/Rule 有什么指导吗? 见***.com/questions/10586779/… 【参考方案1】:

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

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

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

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

【讨论】:

另请参阅此问题以获取有关尝试使用 303 重定向的答案:***.com/questions/7574068/about-redirect-as-post 我认为应该是 307,而不是 303。【参考方案2】:

以下内容应该可行,我目前不在 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]

【讨论】:

你能否展示一下 apache 正在写什么来为 /sample/HostChange/Submit 的单一请求重写日志?正如我所说,我没有检查正则表达式,但上述结构将保留您的有效负载(如果有),以及对原始 URL 的请求中的查询参数(如果有)。我在生产中使用类似的东西根据 URL 模式将请求重定向到 zope 或 jboss。【参考方案3】:

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

以下是详细信息,它对我有用: php Rewrite url and preserve posted data

【讨论】:

以上是关于Apache Mod_Rewrite - 重定向丢失 POST 数据 - 405 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 apache mod_rewrite 规则重定向到动态 URL(不是经典重定向)?

Apache mod_rewrite实现HTTP和HTTPS重定向跳转

mod_rewrite,重定向并设置cookie,防止重定向循环

tomcat 或者 jsp 怎么实现301重定向

mod_rewrite 不在 XAMPP 上执行特定重定向 - 与 DirectoryIndex 冲突?

如何在没有 mod_rewrite 的情况下重定向除一个路径及其所有子路径之外的所有 URL?