如何使用 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'] 并相应地进行路由。如果您将所有内容都重定向到同一个文件,为什么要执行两次相同的逻辑?
我是 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'] 并相应地进行路由。如果您将所有内容都重定向到同一个文件,为什么要执行两次相同的逻辑?