¿Redirigir al archivo .php especificado con try_files si no se encuentra el archivo .php solicitado?

¿Redirigir al archivo .php especificado con try_files si no se encuentra el archivo .php solicitado?

Usando nginx, me gustaría redirigir a /redirect.php con try_files si no se encuentra el archivo .php requerido, ¿es la forma correcta de hacerlo?

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;
}

Sin embargo, no parece funcionar.

Respuesta1

location \.php$significa que cada solicitud que termine con .phpextensión será procesada por este bloque.

Estás try_filesen el lugar equivocado. Debe colocarlo debajo de un location /bloque existente o en el serverbloque.

Respuesta2

Esto es lo que estamos usando enSlickStackpara redirigir cualquier solicitud inexistente .phpa WordPress para manejo de errores (y administración de redireccionamiento 301):

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

Tenga en cuenta que hay muchas respuestas flotando en torno a esa mención, fastcgi_intercept_errors on;sin embargo, eso no es necesario cuando se usa try_filespara el enrutamiento PHP-FPM aquí.

Árbitro:https://github.com/littlebizzy/slickstack/edit/master/modules/nginx/sites/production.txt

información relacionada