我在添加.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方法不起作用。
谢谢。
答案 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]