【问题标题】:REST API Endpoint .htaccess with Optional Fields (PHP)带有可选字段的 REST API 端点 .htaccess (PHP)
【发布时间】:2015-12-30 05:05:52
【问题描述】:

我对 API 完全陌生。我为我们的 Web 应用程序(PHP 环境)创建了一个 UI,并想开发一个 API。我使用这个资源创建了一个REST API with PHP 和这个资源用于best practices

到目前为止,我的 API 可以接受端点,例如:

  • api/search.json
  • api/search/log.json

添加 .json 是为了满足最佳实践的标准,并且没有任何功能(除了可能充当我下一个任务的分隔符)。我想包括一些可选字段。我打算在 .json 之后以这种格式包含这些:

  • api/mandatory-term.json?optional=value
  • api/mandatory-term.json?optional=value&anotheroptional=value

这是我对 .htaccess 解决方案的尝试:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^api/([^.?]+).json\?(.*)$ api/api.php?request=$1&fields=$2 [QSA,NC,L]
RewriteRule ^api/([^.?]+).json$ api/api.php?request=$1 [QSA,NC,L]
</IfModule>

这是继续失败的行:

RewriteRule ^api/([^.?]+).json\?(.*)$ api/api.php?request=$1&fields=$2 [QSA,NC,L]

如果我删除问号(从请求和 .htaccess 中),我可以在 fields 中得到我想要的结果(“&”除外;这会破坏它)。有人介意帮助我了解如何在问号后捕获第二个字段,同时包括与号吗?我很可能会使用 explode 方法将捕获分离为类方法的可选参数数组。

再一次,我对此完全陌生。如果有人可以帮助我解决我的 .htaccess 问题,我会很高兴,但欢迎任何其他建议。我没有选择在什么环境中实现它。我宁愿用 J2EE 来做这件事,但是……没有这样的运气。谢谢!

【问题讨论】:

    标签: php .htaccess api rest


    【解决方案1】:

    我认为你很接近,但你无法匹配重写规则的 pattern 中的查询字符串。您需要匹配查询字符串或使用 QSA。我稍微修改了一下规则。 试试这个。

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    
    RewriteCond %{QUERY_STRING} (.+)
    RewriteRule ^api/([^.?]+)\.json$ api/api.php?request=$1&fields=%1 [QSA,NC,L]
    
    RewriteRule ^api/([^.?]+)\.json$ api/api.php?request=$1 [NC,L]
    </IfModule>
    

    请注意,它将获取请求中的整个查询字符串,并按照您的要求将其添加到 fields var。

    您也可以使用 QSA 标志来附加添加到重写的查询字符串。

    【讨论】:

      猜你喜欢
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-05-19
      • 2018-10-10
      • 2020-01-21
      • 2016-11-21
      • 2018-07-02
      • 2012-10-20
      相关资源
      最近更新 更多