Разрешить выполнение других сценариев php помимо index.php с использованием Symfony 4 и nginx - PullRequest
0 голосов
/ 02 ноября 2019

Полагаю, я недостаточно хорошо понимаю синтаксис, чтобы понять, почему я не могу этого достичь.

Учитывая следующую структуру папок

- www/website
-- public
--- index.php
--- otherscript.php

И следующий файл nginx.conf

server {
    listen          8000;
    server_name     localhost;
    root            /www/website/public;
    index           index.php;

    # optionally disable falling back to PHP script for the asset directories;
    # nginx will return a 404 error when files are not found instead of passing the
    # request to Symfony (improves performance but Symfony's 404 page is not displayed) 
    location / {
        # try to serve file directly, fallback to index.php
        try_files $uri /index.php$is_args$args;
    }

    # would always refer to index.php (server directive)
    location ~ \.php$ {
        ## tried this - no dice
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        index $fastcgi_script_name;
    }

    location ~ ^/index\.php(/|$) {
        fastcgi_pass 127.0.0.1:9001;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }
}

Каждый мой запрос перенаправляется в index.php, что имеет смысл. Я хочу иметь возможность выполнять localhost: 8000 / otherscript.php без перенаправления на index.php.

Как я могу сделать это, не нарушая маршрутизацию Symfony?

1 Ответ

1 голос
/ 03 ноября 2019

Как и в обработчике /index.php, вам необходимо включить файл fastcgi_params, поэтому:

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9001;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param DOCUMENT_ROOT $realpath_root;
}

Обязательно поместите этот после location ~ ^/index\.php(/|$) {, поскольку местоположения регулярных выражений совпадают впорядок присутствия в конфигурации.

...