Nginx PHP-FPM com ponto de entrada único e PATH_INFO

1

Estou tentando configurar o nginx com o php-fpm para que a maioria das solicitações seja passada para um único script php.

O layout do diretório é o seguinte:

assets/...
index.php

Gostaria que os URLs funcionassem como:

/ -> index.php
/foo -> index.php
/bar/baz?spam=ham -> index.php
/assets -> assets folder

index.php deve ter PATH_INFO definido como '/' , '/foo' e '/bar/baz' respectivamente.

A configuração mais próxima que eu descobri é a seguinte:

location / {
    try_files $uri /index.php/$uri$is_args$args;
}

location /assets {
    try_files $uri =404;
}

location /index.php {
    include snippets/fastcgi-php.conf;
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

No entanto, PATH_INFO tem sempre um / adicional (por exemplo, '//' no primeiro caso). A alteração para /index.php$url$is_args$args funciona para todos os casos, exceto para / , que resulta em 404.

Eu poderia, claro, modificar o script para lidar com o / extra, mas parece um pouco sujo.

Eu tenho tentado pesquisar e ler o manual, mas não consigo descobrir, qualquer indicação?

    
por ext 15.10.2016 / 16:04

1 resposta

1

Você comentou que seu snippets/fastcgi-php.conf contém:

fastcgi_split_path_info ^(.+\.php)(/.+)$;

O que você notará, não corresponde ao URI /index.php/ , o que explica por que você recebe uma resposta 404.

Você pode substituir o valor em snippets/fastcgi-php.conf colocando a instrução corrigida após (assumindo que não deseja editar o arquivo do sistema). Por exemplo:

location / {
    try_files $uri /index.php$uri$is_args$args;
}
location /index.php {
    include snippets/fastcgi-php.conf;
    include fastcgi_params;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

Basta alterar o + para um * para que / seja correspondido quando nada mais o seguir.

    
por 15.10.2016 / 17:59

Tags