如何使用 nginx 配置 small api 的重写规则?

How to configure rewrite rules for small api using nginx?

我是 nginx 的新手,对重写规则有疑问。我正在尝试为一个非常小的 API 配置重写规则,有没有比我想出的更合适的方法?

我将在它后面有 PHP 运行,使用一种 MVC 工作流,其中控制器、方法和参数将从 URI 中获取,但第一个参数将代表 API键。

PHP概念:

controller->method( arguments )

配置:

location /api/ {
    # passing api key only
    rewrite ^/api/([0-9\-]+)/?$ /api/index.php?apikey= last;
    # passing api key and controller
    rewrite ^/api/([0-9\-]+)/([0-9a-zA-Z\-]+)/?$ /api/index.php?apikey=&controller= last;
    # passing api key, controller and method
    rewrite ^/api/([0-9\-]+)/([0-9a-zA-Z\-]+)/((select|insert|delete)+)/?$ /api/index.php?apikey=&controller=&method= last;
    # passing api key, controller, method and arguments
    rewrite ^/api/([0-9\-]+)/([0-9a-zA-Z\-]+)/((select|insert|delete)+)/([0-9\-]+)/?$ /api/index.php?apikey=&controller=&method=&argument= last;
}

提前致谢,

如果你为每个 API 请求定义一个重写规则,你最终会得到一个混乱的、难以阅读的 nginx 配置文件。此外,您仍然需要在 PHP.

中定义所有相同的路由

因此,在我看来,只重写一个通用目的是有意义的,例如:

location /api/ {
    # passing api requests
    rewrite ^/api/(.*)/?$ /api/index.php?uri= last;
}

然后处理 index.php 中的所有逻辑——解析 $_REQUEST['uri'] 并相应地进行路由。如果您将所有内容都重定向到同一个文件,为什么要执行两次相同的逻辑?