1

если у меня есть директива местоположения с именованными захватами:

location ~ ^/api/(?<endpoint>[^/]+)(?<pathinfo>.*) {
    root /opt/software/endpoints;
    ## breaks the config:
    # try_files $endpoint.php =418;
    include fastcgi_params; # as supplied by debian 8 "jessie"
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root/$endpoint.php;
}

без try_files вызов правильного URL вызывает php-файл и возвращает результат.

curl -s http://example.com/api/foo/param
> output of foo.php with param "param"

но когда я также активирую try_files в конфиге, curl всегда возвращает 418.

(причина в том, что я хочу указать внутреннее перенаправление, если такой конечной точки не существует, как последний параметр try_files. Но я думаю, что = 418 лучше демонстрирует загадку)

1 ответ1

0

Вы должны захватить ведущий слеш. URI nginx имеют начальную косую черту, поэтому ваша директива try_files (как она есть) всегда будет терпеть неудачу. Вы добавили косую черту обратно с помощью директивы fastcgi_param SCRIPT_FILENAME .

Попробуй это:

location ~ ^/api(?<endpoint>/[^/]+)(?<pathinfo>.*) {
    root /opt/software/endpoints;
    try_files $endpoint.php =418;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_param  SCRIPT_FILENAME  $document_root$endpoint.php;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .