Я новичок в 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;
}
Заранее спасибо,
Если вы определите правило перезаписи для каждого запроса API, вы получите грязный, трудно читаемый файл конфигурации nginx. Более того, вам все равно придется определять все те же маршруты в PHP.
Поэтому, на мой взгляд, имеет смысл переписать только одну общую цель, например:
location /api/ {
# passing api requests
rewrite ^/api/(.*)/?$ /api/index.php?uri=$1 last;
}
А затем обработайте всю логику в index.php — проанализируйте $ _REQUEST [‘uri’] и выполните маршрутизацию соответственно. Если вы перенаправляете все в один и тот же файл, зачем использовать одну и ту же логику дважды?
Других решений пока нет …