繁体   English   中英

在“清理” PHP REST API之后如何访问查询字符串参数?

[英]How to access query string parameters after “Cleaning” your PHP REST API?

为了提供一些背景信息,我最初以如下所示的api开始:

http://myserver/api.php?action=projects

在我的api.php文件中,我有一个简单的if语句来检测操作,然后做出相应的反应:

if (isset($_GET["action"])
{
    switch($_GET["action"])
    {
        case "projects"
          dostuff();
        break;
        case "otherstuff"
          dootherstuff();
        break;
       ...
    }
}

但是,我当然想清理它,所以我可以转到以下网址:

http://myserver/api.php/projects

并获得相同的结果。 通过阅读之前的SO帖子,我能够实现这一目标:

在RESTful API中使用干净的URL

最终通过在我的根目录中创建一个.htaccess文件并使用重写引擎来使其正常工作,如下所示:

RewriteEngine On
RewriteRule ^action/([^/\.]+)/?$ api.php?action=$1 [L]

这很棒! 除了一个问题之外,因为我使用的是干净URL,所以它似乎不再能够识别GET参数的存在。

我发现我可以使用$ _SERVER ['REQUEST_URI'];

然后解析URL以获取我的参数。 我一开始引入多个参数,就看不到如何解决。 我在这里缺少什么,还是需要以另一种方式看待它并更改我格式化参数的方式?

您可以使用以下规则:

RewriteEngine On

RewriteRule ^(?:action|api\.php)/([^/.]+)/?$ api.php?action=$1 [L,NC,QSA]

更改为此:

RewriteEngine On
RewriteRule ^action/([^/\.]+)/?$ api.php?action=$1 [L, QSA]

您需要QSA参数来保持查询字符串完整。 所以现在这是可能的:

/action/projects/?my=name

或者您可以这样做:

RewriteEngine On
RewriteRule ^action/([^/\.]+)/([^/\.]+)/?$ api.php?action=$1&method=$2 [L, QSA]
RewriteRule ^action/([^/\.]+)/?$ api.php?action=$1 [L, QSA]

现在,您将拥有以下URL:

/action/projects/add/
/action/projects/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM