Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Apache重写规则和POST数据_Php_Apache_.htaccess_Mod Rewrite_Vps - Fatal编程技术网

Php Apache重写规则和POST数据

Php Apache重写规则和POST数据,php,apache,.htaccess,mod-rewrite,vps,Php,Apache,.htaccess,Mod Rewrite,Vps,我已成功安装URL重写策略,我已将其包括在下面(.htaccess): 但是,它正在丢失POST数据。我见过其他问题通过将完整url更改为相对url(我的是相对url)或安装类似MOD_PROXY的东西来解决这个问题。但是,如果可能的话,我希望不需要安装额外的ApacheMods就可以保留它。我也试过了 有什么想法吗?重写正在运行,但我正在丢失POST数据。然而,它是作为请求的方法保留POST。当它通过我正在构建的API的身份验证块时,它还保留了头。您可能需要2个重写条件来停止对有效文件和目录的

我已成功安装URL重写策略,我已将其包括在下面(.htaccess):

但是,它正在丢失POST数据。我见过其他问题通过将完整url更改为相对url(我的是相对url)或安装类似MOD_PROXY的东西来解决这个问题。但是,如果可能的话,我希望不需要安装额外的ApacheMods就可以保留它。我也试过了


有什么想法吗?重写正在运行,但我正在丢失POST数据。然而,它是作为请求的方法保留POST。当它通过我正在构建的API的身份验证块时,它还保留了头。

您可能需要2个重写条件来停止对有效文件和目录的重写

实际上没有特殊设置使
POST
工作。只需在DocumentRoot中创建一个
.htaccess
,如下所示:

Options +FollowSymlinks
RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^rest/([\w\d~%.:/-]+)$ info.php?params=$1&v=t [L,QSA]
然后在
DocumentRoot
中创建
info.php
,如下所示:

<?php phpinfo(); ?>

最后在浏览器中打开
localhost/form.html
,然后单击submit。它将打开
localhost/info.php
,并应完整显示您的帖子数据。

我知道此线程有多旧,但我想添加另一个可能导致mod rewrite丢失您的帖子数据的原因

如果您的一些URL功能正常,甚至按预期维护POST数据,而其他URL则不正常,请检查Apache错误日志。Apache可能会抛出“协商:发现的文件匹配请求:/path/to/something(无法协商)。”如果是这种情况,请打开Apache配置文件并关闭“多视图”选项,重新启动Apache,这样可能会解决问题。这个博客解释得更详细


您在浏览器中看到了什么URL?您想将其重写为什么?我正在使用PAW(一个为方便使用而购买的REST API程序),但我的目的是将URL保留为重写的URL(而不是重定向)。我放置了{domain}/rest/queue/new.xml,它将点击页面进行输出(因此路由正在工作,我只是丢失了POST数据)。即使使用重写,我也可以使用标题。我能提供什么具体的帮助吗?POST数据不会像上面所示的那样在内部重写中丢失。还有更多的规则吗?没有。这是整个.htaccess文件(也是唯一的.htaccess文件)。我正在确认方法是POST,请求方法生成“POST”,但当我打印($\u POST)时,我得到一个空数组。我确实打印了\u r($\u请求)来获取所有POST和get(如果我使用的程序合并了它们或其他东西),并且我只从重写规则(params和v)中获取这两个值。我可以从phpinfo()中提供任何值来帮助吗?首先,感谢您发布正式答案。我不能接受评论作为答案。从域内发布始终有效,其中请求的来源与请求的收件人所在的域相同。但是,对于来自域之外的请求,它不是。你能试着使用(或者类似的东西,比如我正在使用的PAW)看看它是否仍然接受这个帖子吗?它的请求来自我遇到问题的域之外。它也可以从rest控制台工作。您只需要发送
Content-Type=application/x-www-form-urlencoded
标题,现在就可以了。我将QSA添加到重写中,并下载了另一个REST客户端。现在POST数据正在处理中,到目前为止一切都正常。我非常感谢您,但从URL重写和新客户端的更改来看,它的工作与预期一样。非常感谢你的帮助。不客气,很高兴你最终成功了。对我来说,这也是一次有趣的讨论。
<?php phpinfo(); ?>
<html><body>
<form method="post" action="/rest/queue/submit.xml?locations=this%20is%20a%20test">
   <input type="text" name="foo" value="foo"><br />
   <input type="text" name="bar" value="bar"><br />
   <input type="text" name="baz" value="baz"><br />
   <input type="submit" name="go" value="Submit">
</form>
</body></html>