Subdiretório Nginx O caractere curinga wildcard sempre falha

1

Nginx 1.10.3 Ubuntu, instalação padrão do apt. index index.php; localizado fora de server block.

Eu preciso:

  • http://example.com/test/1 apontando para %código%
  • /var/www/example.com/test/1 apontando para %código%

.. e assim por diante.

Como vou criar muitos testes, preciso de um curinga para http://example.com/test/2 . 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.

Plain PHP funcionando bem. WordPress & Laravel deu "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, faça o download do 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 US $ 10 pela resposta certa

    
por Isak Pontus 29.08.2018 / 05:47

1 resposta

2

A expressão regular location blocks é avaliada em ordem, portanto o bloco .php deve ser colocado antes do bloco /test/... , caso contrário os arquivos .php em /test/ serão baixados em vez de serem executados. Consulte este documento para obter detalhes.

Sua melhor versão foi a segunda do passado. A expressão regular extrai apenas o elemento do caminho após o prefixo /test/ .

Apenas inverta os blocos location . 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;
    }
}
    
por 29.08.2018 / 10:52