是否有可能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的问题。
这是我的.htaccess
redirect到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">