无法在PHP中获取$ _REQUEST值

时间:2014-11-06 08:35:19

标签: php .htaccess restful-url

我试图创建一个宁静的api唯一的问题是我无法获得$ _REQUEST值。相同的代码在localhost上工作正常,但在服务器上却没有。这可能是由于我的htaccess代码而发生的。当url processApi的api调用是被调用的函数并找出url调用此api的哪个函数时

例如 http://www.domain.com/file.php/api/test

现在我试图调用test类中的api函数

htaccess代码重定向我的网址

api类中的第一个函数是processApi,检查是否存在测试函数

但在processApi函数内,$ _REQUEST值为null

这是在服务器上发生的,但在localhost上它可以正常工作

这是htaccess代码

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteRule ^(.*)$ file.php?request=$1 [QSA,NC,L]

    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^(.*)$ file.php [QSA,NC,L]

    RewriteCond %{REQUEST_FILENAME} -s
    RewriteRule ^(.*)$ file.php [QSA,NC,L]  

</IfModule>

这是api代码

class API extends REST 
{               
    private $db = NULL;

    public function __construct()
    {
        parent::__construct();
    }

    public function processApi()
    {
       $func = strtolower(trim(str_replace("api/","",$_REQUEST['request'])));

        if((int)method_exists($this,$func) > 0)
        {   
                  $this->$func();  
        }
        else
        {            
                $error = array('status' => '402', "msg" => 'function not exist');
                $this->response($this->json($error), 402);
        }
     } 
  }

  $api = new API;
  $api->processApi();

通过将此代码运行到服务器上我得到了

{"status":"402","msg":"function not exist"}

仅因为$ _REQUEST [&#39;请求&#39;]为空

请指出我为什么$_REQUEST['request'] = null。我的htaccess代码是否在$_REQUEST['request']

中给出了正确的价值

2 个答案:

答案 0 :(得分:1)

你应该看看PHP的$_SERVER变量而不是$_REQUEST

$_SERVER['REQUEST_URI'] should give you the correct URI for /api/test

在$ _SERVER上运行var_dump可以获得有关当前请求(以及正在处理它的服务器环境)的更多信息。

希望这有帮助!

答案 1 :(得分:0)

这可能是由于你的第一条规则之后运行的最后一条规则而发生的。像这样更改你的代码:

<IfModule mod_rewrite.c>
    RewriteEngine On

    # skip after rewriting first time
    RewriteCond %{ENV:REDIRECT_STATUS} !^$
    RewriteRule ^ - [L]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-s
    RewriteRule ^(.*)$ file.php?request=$1 [QSA,L]

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -s
    RewriteRule . file.php [L]  

</IfModule>