Apache .htaccess 重定向删除表单数据

Posted

技术标签:

【中文标题】Apache .htaccess 重定向删除表单数据【英文标题】:Apache .htaccess redirect removes form data 【发布时间】:2014-02-06 01:42:36 【问题描述】:

为了在我的应用中保持一致性,我需要所有请求都包含 www,所以我使用 .htaccess 文件,如下所示:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %HTTP_HOST !^(www\.) [NC]
RewriteRule ^ http://www.%HTTP_HOST%REQUEST_URI [R=301,QSA,NC,L]
</IfModule>

它工作得很好。然而,当 POST 请求在没有 www 的情况下发送时,表单数据将被删除。这是预期的吗?有没有办法纠正这个问题?

【问题讨论】:

【参考方案1】:

在我遇到的每个浏览器中,状态为 301,302 或 303 的重定向响应始终作为 GET 处理。因此,客户端浏览器将看到重定向的 POST 请求,并将向重定向响应中提供的 URL 发出 GET 请求。有关如何优雅地解决此问题的详细信息,请参阅我对以下问题的回答以及其他人添加的 cmets: Apache 301 Redirect and preserving post data

【讨论】:

谢谢雷。我的问题与浏览器无关,因为我正在以编程方式发出 API 请求。您所说的关于 301 重定向的内容是否适用于任何代理?我的大部分测试都是使用 Chrome Postman 插件完成的,但在生产中它将来自运行在服务器上的 java 应用程序。 我刚刚阅读了您的另一篇文章,听起来 301 将每个人都转换为 GET 请求。浏览器或没有浏览器。 @SDP 它完全依赖于客户端代理,但浏览器会自动按照描述重定向。一些客户端和库(如 curl、wget 等)不允许您自动跟踪重定向。您正在使用的 java rest 库可能可以配置为在发布帖子时不自动重定向,并且当您点击重定向时,构建一个新帖子到新 URL(假设资源接受帖子请求)。请记住:实际的重定向处理发生在客户端。服务器所做的只是返回一个 URL 和 30x 状态码。

以上是关于Apache .htaccess 重定向删除表单数据的主要内容,如果未能解决你的问题,请参考以下文章

如何删除 php 扩展并将扩展重定向到无扩展表单

apache_conf Apache .htaccess重定向

apache_conf 重定向htaccess

apache_conf htaccess重定向

apache_conf 重定向Htaccess

apache_conf Htaccess重定向