Redirecionar para o arquivo .php especificado com try_files se o arquivo .php solicitado não for encontrado?

Redirecionar para o arquivo .php especificado com try_files se o arquivo .php solicitado não for encontrado?

Usando o nginx, gostaria de redirecionar para /redirect.php com try_files se o arquivo .php necessário não for encontrado, é o caminho certo para fazer isso:

location ~ \.php$ {
...
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        try_files $uri /redirect.php =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
}

No entanto, não parece funcionar.

Responder1

location \.php$significa que toda solicitação que termine com .phpextensão será processada por este bloco.

Você try_filesestá no lugar errado. Você precisa colocá-lo sob um location /bloco existente ou no serverbloco.

Responder2

Isto é o que estamos usando emSlickStackpara redirecionar quaisquer solicitações inexistentes .phppara o WordPress para tratamento de erros (e gerenciamento de redirecionamento 301):

location ~* \.php$ {
    include /etc/nginx/fastcgi.conf;
    try_files $uri $uri/ /index.php?$args; ## send .php requests to WordPress if not found
...
}

Observe que muitas respostas estão flutuando em torno dessa menção, fastcgi_intercept_errors on;no entanto, isso não é necessário ao usar try_fileso roteamento PHP-FPM aqui.

Referência:https://github.com/littlebizzy/slickstack/edit/master/modules/nginx/sites/production.txt

informação relacionada