繁体   English   中英

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

[英]REST API Endpoint .htaccess with Optional Fields (PHP)

我是API的新手。 我为我们的Web应用程序(PHP环境)创建了一个UI,并希望开发一个API。 我使用此资源创建了一个包含PHPREST API,以及用于最佳实践的此资源。

到目前为止,我的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),我可以在字段中获得我想要的结果(除了“&”;它会打破它)。 有人会介意帮助我了解如何在包含&符号的问号后捕获第二个字段吗? 我很可能使用explode方法将捕获分离为类方法的可选参数数组。

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

我认为你很接近,但你无法匹配rewriterule 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标志附加添加到重写的查询字符串。

暂无
暂无

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

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