Получить подстановочный знак местоположения nginx внутри блока местоположения?

Я пытаюсь настроить API, где я могу получить доступ к API " foobar "через URL http://my-apis.com/foobar/route . Вот что у меня есть:

location ~ ^/foobar(/.*)$ {
    root /var/www/mysite/foobar/public;

    ... more fastcgi stuff ...

    fastcgi_param SCRIPT_FILENAME $document_root/index.php$1;
    fastcgi_param PATH_INFO $fastcgi_path_info;
}

API выполняет маршрутизацию к приложению Slim framework, и в настоящее время он успешно перенаправляется на правильный index.php, показывая nginx 404/403 всякий раз, когда URL-адрес не начинается с / foobar . Однако путь прошел к Слиму (который, похоже, s, представленный $ 1 в строке 6), по-прежнему является полным / foobar / route . Это означает, что мне нужно добавить все мои маршруты Slim с помощью / foobar , что, хотя я могу использовать группу Slim, по-прежнему вызывает затруднения. Я хотел бы иметь возможность передавать Slim только бит / route .

Есть ли способ извлечь только бит, соответствующий подстановочному знаку, из директивы местоположения? Так как $ 1 дает полный маршрут. В качестве альтернативы я мог бы сделать это с помощью какой-нибудь перезаписи, но я недостаточно знаю о Slim.

Любая помощь будет очень признательна!

Спасибо!

1
задан 23 December 2017 в 12:52
1 ответ

SCRIPT_FILENAME - это путь к сценарию, а не исходный URI. Скрипты получают информацию о пути из PATH_INFO или путем декодирования исходного URI (используя REQUEST_URI ).

Это может сработать для вас:

fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param PATH_INFO $1;
1
ответ дан 3 December 2019 в 23:21

Теги

Похожие вопросы