Reescrevendo URLs de requisição e passando para o cgi rápido

1

Eu tenho um bloco de servidores da seguinte forma:

server {
    listen 80;

    # ...

    location / {
        try_files $uri $uri/ /index.php?$query_string;

        # I've tried adding "$uri.php" like so, but it downloads the php file instead.
        # try_files $uri $uri/ $uri.php /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

Se uma solicitação como essa vir em http://example.com/random/page , eu preciso do Nginx para reescrevê-la em http://example.com/random/page.php sem alterar o URL do usuário. Também precisa passar essa solicitação para o outro bloco de localização. Se esse arquivo php não existir, ele deve retornar um 404. Como posso conseguir isso?

    
por Jeff 21.04.2017 / 19:59

1 resposta

0

Uma das muitas possibilidades:

server {
    listen 80;
    ...
    location / {
        try_files $uri $uri/ @rewrite;
    }
    location @rewrite {
        rewrite ^ $uri.php last;
    }
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        include fastcgi_params;
    }
}

Você deve testar a existência do arquivo no bloco location ~ \.php$ , como mencionado em esta nota de aplicação .

    
por 21.04.2017 / 20:33