O curinga try_files do subdiretório Nginx sempre falha

O curinga try_files do subdiretório Nginx sempre falha

Nginx 1.10.3 Ubuntu, instalação padrão do apt. index index.php;localizado fora serverdo quarteirão.

Eu preciso de:

  • http://example.com/test/1apontando para /var/www/example.com/test/1
  • http://example.com/test/2apontando para /var/www/example.com/test/2

..e assim por diante.

Como criarei muitos testes, preciso de um curinga para try_files. Atualmente estou sem curinga:

server {
    server_name example.com;
    root   /var/www/example.com;
    location /test/1/ {
        try_files $uri $uri/ /test/1/index.php?$args;
    }
    location /test/2/ {
        try_files $uri $uri/ /test/2/index.php?$args;
    }
    location ~ \.php$ {
        ...
}

De muitas recomendações, nenhuma delas funciona.

PHP simples funcionando bem. WordPress e Laravel deram "Arquivo não encontrado":

server {
    server_name example.com;
    location ~ ^/test/(?<content>.+)$ {
        root   /var/www/example.com/test/$content;
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        ...
}

Arquivo não encontrado:

server {
    server_name example.com;
    location ~ ^/test/(?<content>[^/]+) {
        root   /var/www/example.com/test/$content;
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        ...
}

Em todas as tentativas abaixo, baixe o arquivo PHP em vez de executar o PHP:

server {
    server_name example.com;
    root   /var/www/example.com;
    location ~ /(?<content>[^/]+) {
        try_files $uri $uri/ /$content/index.php?$args;
    }
    location ~ \.php$ {
        ...
}

server {
    server_name example.com;
    root   /var/www/example.com;
    location ~ /(.*)/ {
        try_files $uri $uri/ /$1/index.php?$args;
    }
    location ~ \.php$ {
        ...
}

server {
    server_name example.com;
    root   /var/www/example.com;
    location ~ /test/(?<content>[^/]+) {
        try_files $uri $uri/ /test/$content/index.php?$args;
    }
    location ~ \.php$ {
        ...
}

server {
    server_name example.com;
    root   /var/www/example.com;
    location ~ /test/(?<content>.+) {
        try_files $uri $uri/ /test/$content/index.php?$args;
    }
    location ~ \.php$ {
        ...
}

Se puder, estou disposto a dar $ 10 pela resposta certa

Responder1

locationOs blocos de expressões regulares são avaliados em ordem, portanto o .phpbloco deve ser colocado antes do /test/...bloco, caso contrário os .phparquivos abaixo /test/serão baixados em vez de executados. Veresse documentopara detalhes.

Sua melhor versão ficou em penúltimo lugar. A expressão regular extrai apenas o elemento do caminho após o /test/prefixo.

Basta inverter os locationblocos. Por exemplo:

server {
    server_name example.com;
    root   /var/www/example.com;
    location ~ \.php$ {
        ...
    }
    location ~ /test/(?<content>[^/]+) {
        try_files $uri $uri/ /test/$content/index.php?$args;
    }
}

informação relacionada