我已经成功安装了一个URL重写策略,我在下面包含了这个策略(.htaccess):
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^rest/([\w\d~%.:_\/-]+)$ controllers/rest_api.php?params=$1&v=t [NC]
然而,它正在丢失POST数据。我已经看到其他问题通过将FULL url更改为相对的(我的是),或者通过安装类似MOD_PROXY的东西来解决这个问题。但是,如果可能的话,我想保留这个,而无需安装额外的apache mod。我也试过[NC,L]。
有什么想法吗? Rewrite正在运行,但我只是丢失了POST数据。但是,它将POST保留为request_method。它还保留了标题,因为它通过了我正在构建的API的身份验证块。
答案 0 :(得分:1)
您可能需要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]
然后在info.php
中创建DocumentRoot
:
<?php phpinfo(); ?>
最后在form.html
:
DocumentRoot
的表单
<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>
最后在浏览器中打开localhost/form.html
,然后点击提交。它将打开localhost/info.php
并显示您的POST数据完好无损。
答案 1 :(得分:0)
我知道此线程的年龄,但是我想为mod重写增加另一个可能导致丢失POST数据的潜在原因。
如果您的某些URL正常运行,甚至按预期维护POST数据,而其他URL则无法正常运行,请检查Apache错误日志。 Apache可能会抛出“协商:发现的文件匹配请求:/ path / to / something(无法协商)。”如果是这种情况,请打开您的Apache配置文件并关闭MultiViews选项,然后重新启动Apache,这可能会解决此问题。该博客更详细地解释了。