我是nginx的新手,对重写规则有疑问。我正在尝试为一个非常小的API配置重写规则,有没有比我提出的更合适的方式呢?
我将在它后面运行PHP,使用一种类型的MVC工作流,其中控制器,方法和参数将从URI获取,但第一个参数将代表API密钥。
PHP概念:
controller->method( arguments )
配置:
location /api/ {
# passing api key only
rewrite ^/api/([0-9\-]+)/?$ /api/index.php?apikey=$1 last;
# passing api key and controller
rewrite ^/api/([0-9\-]+)/([0-9a-zA-Z\-]+)/?$ /api/index.php?apikey=$1&controller=$2 last;
# passing api key, controller and method
rewrite ^/api/([0-9\-]+)/([0-9a-zA-Z\-]+)/((select|insert|delete)+)/?$ /api/index.php?apikey=$1&controller=$2&method=$3 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=$1&controller=$2&method=$3&argument=$4 last;
}
提前致谢,
答案 0 :(得分:0)
如果为每个API请求定义重写规则,最终将会出现一个混乱,难以阅读的nginx配置文件。此外,您仍然需要在PHP中定义所有相同的路由。
因此,在我看来,只有一个通用的重写是有意义的,例如:
location /api/ {
# passing api requests
rewrite ^/api/(.*)/?$ /api/index.php?uri=$1 last;
}
然后处理index.php中的所有逻辑 - 解析$ _REQUEST [' uri']并相应地路由。如果要将所有内容重定向到同一个文件,为什么要实现两次相同的逻辑呢?