带有可选字段的REST API端点.htaccess(PHP)

时间:2015-12-29 18:37:18

标签: php .htaccess api rest

我是API的新手。我为我们的Web应用程序(PHP环境)创建了一个UI,并希望开发一个API。我使用此资源为REST API with PHP创建best practices和此资源。

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

  • API / search.json
  • API /搜索/ log.json

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

  • API /强制性-term.json?可选=值
  • API /强制性-term.json可选=值安培; anotheroptional =值

这是我尝试使用.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),我可以在字段中获得我想要的结果(&#34;&amp;&#34 ;;& #39;打破它)。有人会介意帮助我了解如何在包含&符号的问号后捕获第二个字段吗?我最有可能使用explode方法将捕获分离为类方法的可选参数数组。

同样,我对此完全陌生。如果有人可以帮我解决我的.htaccess问题,我很乐意,但欢迎任何其他建议。我没有选择实现这个的环境。我本来希望用J2EE做到这一点但是......没有这样的运气。谢谢!

1 个答案:

答案 0 :(得分: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标志附加添加到重写的查询字符串。