我正在重新编写一个为MyBB开发的RESTful API系统,并且我已经完成了它,我知道大多数API用于更新以使API更好,例如:
- https://api.example.com/v1
- https://api.example.com/v2
因此,我计划在同一域下为每个版本的API使用一个PHP文件,例如:
- api.example.com = [webroot]
- API v1:
- [webroot]/v1.php
- [webroot]/apifiles/v1 (files required for the API to work)
- API v2:
- [webroot]/v2.php
- [webroot]/apifiles/v2 (files required for the API to work)
所有 [apifiles] 通过与该版本相对应的PHP文件进行访问。
事实是,当我尝试编写 .htaccess 文件以使用户在编写此类URL时直接访问 v [#]。php 文件时, :
https://api.example.com/v1/authenticate?output=[output]&apikey=[apikey]&username=[username]&password=[password]
如果未正确接收参数,则会引发API通常会显示的错误:
URL正确编写:
https://api.example.com/v1.php/authenticate/?apikey=[apikey]&output=[output]&username=[username]&password=[password]
Answer: {"uid":"[uid]","username":"[username]",...}
URL缺少参数:
https://api.example.com/v1.php?apikey=[apikey]&output=[output]&username=[username]&password=[password]
Answer: {"error":"You don't have permission to access this page."}
唯一的区别是/authenticate/
文件和v1.php
之间的?
字符串。该字符串可以更改,具体取决于用户希望使用API进行什么操作(身份验证,在线,权限等),取决于此字符串将取决于传递的参数数量。
我尝试了几种方法,甚至在整个互联网上搜索了答案,但是找不到真正对我有帮助的答案。他们帮助我了解了 .htaccess 文件的工作方式。主要帮助我的一个是:https://code.tutsplus.com/tutorials/using-htaccess-files-for-pretty-urls--net-6049
作者推荐此工具:https://regexr.com/
我当前的 .htaccess 文件包含以下内容:
Options +FollowSymLinks
<IfModule mod_rewrite.c>
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^v(\d+)\/([a-z]+)?(.*)$ ./v$1.php/$2/?$3 [L,QSA,NC]
</IfModule>
但是它不起作用,即使经过研究,我也想不出如何使它起作用。预先感谢。
答案 0 :(得分:0)
经过大量研究,尝试和时间,我得出的结论是不可能像@CBroe所建议的那样将$_SERVER['PATH_INFO']
与URL Rewriting
混合使用。