我有一个网站,所有的请求都被静默地重定向(通过.htaccess
)到index.php
,然后PHP被用来显示正确的页面(通过解析REQUEST_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,因为它不能发送那么多的信息,虽然这可能不是一个简单的查询表单的问题。
这里是我的.htaccess
用于重定向到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
6条答案
按热度按时间9ceoxa921#
试试看:
“P”的作用与“L”类似,它停止处理规则,但它还告诉模块请求应原封不动地传递给代理模块(意味着保留POST数据)。
7ajki6be2#
您应该能够简单地重定向到
index.php
,然后在该脚本中访问$_SERVER['REQUEST_URI']
以查看原始请求,“send-mail”保持不变。顺便说一下,“不能发送那么多信息”不是使用POST的原因,使用POST的原因是请求将修改您站点上的数据,而不是简单地检索数据。
假设你在页面上放了一个超链接,并发出GET请求,比如“
/delete_user?id=1234
”,然后某个搜索引擎在索引你的网站时无意中跟踪了这个链接,这就是为什么GET请求不适合修改数据的请求。1wnzp6jl3#
我发现最可靠的方法是使用
307
状态码。状态码307表示请求应该使用相同的HTTP方法和数据重复。因此,如果使用此状态码,您的
POST
请求将与其数据沿着重复。您也可以检测请求是否为
POST
请求,以防您需要为非POST
请求支持标准301
重定向。3ks5zfa04#
我想将user_login. php重定向到seo友好的url,如/user-login,并使用post表单数据,这对我很有效。
在视图文件中
cgfeq70w5#
为了避免某些代理和Apache重写出现问题,请传入
POST
数据或为正文为空的请求设置Content-Length: 0
标头。我最近在Apache将我的请求转换为
GET
时遇到了一些问题,当我用一个空的主体执行一个POST
时。传递
Content-Length
报头:或者传递到身体里
yptwkmov6#
只要你只使用内部重写,而不是HTTP重定向,你就不会丢失POST数据。下面是我在我的网站上使用的规则:
尝试使用Firefox的HTTPLiveHeaders扩展(或类似的扩展)并跟踪整个页面请求。确保您没有获得HTTP重定向。如果您获得HTTP/1.1 3xx响应和**位置:* http://address***header,这就是问题所在。您发布的重写规则不应导致这种情况发生。如果您被重定向,可能是PHP代码中有错误,或者正在应用另一个重写规则。