.htaccess帮助,用于RESTful API系统的URL重写

时间:2018-07-23 07:12:48

标签: apache .htaccess

我正在重新编写一个为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>

但是它不起作用,即使经过研究,我也想不出如何使它起作用。预先感谢。

1 个答案:

答案 0 :(得分:0)

经过大量研究,尝试和时间,我得出的结论是不可能像@CBroe所建议的那样将$_SERVER['PATH_INFO']URL Rewriting混合使用。