在.htaccess apache重写后删除了POST方法

时间:2013-12-02 11:43:28

标签: apache .htaccess mod-rewrite

我在添加.htaccess后发布POST数据时遇到问题,这是我的.htaccess。

RewriteEngine on
RewriteCond %{REQUEST_METHOD}  !=POST
RewriteRule ^index\.php(.*)$ index.php$1 [NC] 
RewriteRule ^([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1 [L]
RewriteRule ^([-a-zA-Z0-9_]+)[\/]([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1&args[1]=$2 [L]
RewriteRule ^([-a-zA-Z0-9_]+)[\/]([-a-zA-Z0-9_\@\.]+)[\/]([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1&args[1]=$2&args[2]=$3 [L]
请帮助我,我做错了什么?在htaccess规则之后POST方法不起作用。

谢谢。

2 个答案:

答案 0 :(得分:1)

我刚刚终止了我的测试,这里是我的解释,以及你想要的规则集:

RewriteEngine on
#RewriteCond %{REQUEST_METHOD}  !=POST
#RewriteRule ^index\.php$ index.php [QSA,L,NC] 

RewriteRule ^([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1 [L]
RewriteRule ^([-a-zA-Z0-9_]+)[\/]([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1&args[1]=$2 [L]
RewriteRule ^([-a-zA-Z0-9_]+)[\/]([-a-zA-Z0-9_\@\.]+)[\/]([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1&args[1]=$2&args[2]=$3 [L]

由于您既没有重定向也没有[R]标记,POSTed数据不会丢失,只有Redirect会发布所有发布的数据。

作为POST操作的php脚本可以接受$ _POST和$ _GET,这里 $ args 保留在PHP的$ _GET数组中。其他发布的数据在$ _POST。

所以请在index.php中测试一下:

<?php
echo "<pre>
\$_GET
";
var_dump($_GET);
echo "</pre>";

echo "<pre>
\$_POST
";
var_dump($_POST);
echo "</pre>";
?>
<form action="souper/ppan/ppm/" method="POST">
<input type="text" name="super" value="man" />
<input type="submit" name="submit" />
</form>

您不仅会看到$ _POST数据,还会看到index.php显示的$ _GET变量。

我在谷歌浏览器上得到了这个:

$_GET
array(1) {
  ["args"]=>
  array(3) {
    [0]=>
    string(6) "souper"
    [1]=>
    string(4) "ppan"
    [2]=>
    string(3) "ppm"
  }
}
$_POST
array(2) {
  ["super"]=>
  string(3) "man"
  ["submit"]=>
  string(7) "Valider"
}

答案 1 :(得分:0)

RewriteCond仅适用于下一个RewriteRule

你的规则如下:

RewriteEngine on

RewriteCond %{REQUEST_METHOD} =POST
## don't do anything for POST
RewriteRule ^ - [L]

RewriteRule ^index\.php(.*)$ index.php$1 [NC,L]

RewriteRule ^([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1 [L]

RewriteRule ^([-a-zA-Z0-9_]+)[\/]([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1&args[1]=$2 [L]

RewriteRule ^([-a-zA-Z0-9_]+)[\/]([-a-zA-Z0-9_\@\.]+)[\/]([-a-zA-Z0-9_]+)[\/]$ index.php?args[0]=$1&args[1]=$2&args[2]=$3 [L]