是否有可能redirect发布数据?

我有一个网站,所有的请求被无声地(通过.htaccess )redirect到index.php ,然后PHP被用来显示正确的页面(通过parsingREQUEST_URI )。

我想知道是否有可能提交POST数据到一个虚假的地址吗?

我目前有我的表格,所以…

 <form action="/send-mail" method="post"> 

而我的.htaccess规则是…

 # redirect mail posting to index RewriteRule send-mail index.php?send-mail [NC,L] 

我的index.php检查isset($_GET['send-mail'])正常工作。

然而,这似乎放弃了所有应该发送给它的POST数据。

有没有办法保留发布数据? 我不想使用GET,因为它不能发送尽可能多的信息,虽然它可能不是一个简单的查询forms的问题。

这是我的.htaccessredirect到index.php

 # serve files and dirs if they exist please, otherwise send to index RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule . index.php 

尝试这个:

 # redirect mail posting to index RewriteRule send-mail index.php?send-mail [NC,P] 

“P”就像“L”一样,它停止处理规则,但它也告诉模块,请求应该完整地传递给代理模块(意味着保留POST数据)。

你应该能够简单地redirect到index.php ,然后在该脚本中访问$_SERVER['REQUEST_URI']来查看原始请求,“发送邮件”保持不变。

顺便说一下,“不能发送尽可能多的信息”不是使用POST的原因。 使用POST的原因是请求会修改您网站上的数据,而不是简单地检索数据。

假设你用一个GET请求(比如“ /delete_user?id=1234 ”)在你的页面上放置了一个超链接,然后一些search引擎会在你的网站/delete_user?id=1234索引时, 这就是为什么GET请求不适合修改数据的请求。

只要你只使用内部重写,而不是HTTPredirect,你不应该失去POST数据。 这是我在我的网站上使用的规则:

 RewriteRule ^(.*)$ index.php/$1 [L] 

尝试使用Firefox的HTTPLiveHeaders扩展(或类似的东西)并跟踪整个页面请求。 确保你没有得到HTTPredirect。 如果您得到一个HTTP / 1.1 3xx响应和位置: http://地址标题,那是问题。 您发布的重写规则不应导致发生这种情况。 如果您正在redirect,可能是您的PHP代码中有错误,或者是正在应用的另一个重写规则。

为了避免一些代理和Apache重写的问题,传入POST数据或为空的主体设置Content-Length: 0头。

我最近有问题与Apache转换我的请求到一个GET时做一个空的身体POST 。 所以,而不是这个:

  curl -X POST https://example.com/api/user/123456789 

传递Content-Length标头:

  curl -X POST https://example.com/api/user/123456789 -H 'Content-Length: 0' 

或者在身体里传递一些东西:

  curl -X POST https://example.com/api/user/123456789 -d '' 

我想将user_login.phpredirect到seo友好的url,例如/ user-login,并发布表单数据,这对我很有帮助。

 RewriteCond %{THE_REQUEST} ^[AZ]{3,}\s/user_login\.php [NC] RewriteRule ^ user-login [QSA,R=301] RewriteRule ^user-login$ user_login.php [QSA,L] 

在查看文件

 <form action="<?php $siteurl;?>/user-login" method="post" id="user_login">