这是我的.htaccess
RewriteBase /action
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ action.php?fid=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ action.php [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -s
RewriteRule ^(.*)$ action.php [QSA,NC,L]
因此,它位于文件夹/action
现在可以将文件http://domain/action/action.php?fid=
称为http://domain/action/{fid}
,其中fid
是函数名称,如下所示:
<?php
class Actions{
function call($func){
if(method_exists($this, $func) == true){
$this->$func();
} else {
http_response_code(403);
echo "403 Forbidden";
}
}
private function deleteFile(){
if(isset($_POST['auth'])){
if(!cookie_login($_POST['auth'])){
echo '403';
} else {
if(isset($_POST['token'])){
if(delete_file($_POST['token'])){
echo '200';
} else {
echo '500';
}
} else {
echo '404';
}
}
} else {
echo '404';
}
}
}
print_r($_GET);
$action = new Actions();
$action->call($_GET['fid']);
现在我按deleteFile()
方式调用http://domain/action/deleteFile
方法,根据代码$_GET['fid']
等于deleteFile
。
但是,这种情况并没有发生。
案例1输出:
方法:POST
网址:http://domain/action/deleteFile
Array
(
[fid] => index.php
)
403 Forbidden
案例2输出:
方法:GET
网址:http://domain/action/deleteFile
Array
(
[fid] => deleteFile
)
404
描述:这里没有POST参数,这就是为什么它回显404,但方法正在执行。
尝试1:将$_GET
和$_POST
更改为$_REQUEST
结果不会改变。
现在查看案例1输出。
fid
应该是deleteFile
,但它是index.php
。如果我注释掉$this->$func();
方法中的Action->call($func)
,那么就是输出。
方法:POST
或GET
网址:http://domain/action/deleteFile
Array
(
[fid] => deleteFile
)
表示,只有当$this->$func();
中有Action->call($func)
这一行时,它才会出现故障。 index.php
来自哪里?怪异!!
我真的不知道这个问题。请帮忙。
答案 0 :(得分:2)
您的cookie_login
函数似乎可能正在弄乱$_REQUEST['fid']
变量。当我在本地开发实例中将其旋转时,所有其他代码似乎都按预期工作。