我是API的新手。我为我们的Web应用程序(PHP环境)创建了一个UI,并希望开发一个API。我使用此资源为REST API with PHP创建best practices和此资源。
到目前为止,我的API工作可以接受端点,例如:
添加.json是为了满足最佳实践的标准,并且不提供任何功能(除了可能充当我下一个任务的分隔符)。我想包含一些可选字段。我打算以这种格式包含这些.json:
这是我尝试使用.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做到这一点但是......没有这样的运气。谢谢!
答案 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标志附加添加到重写的查询字符串。