Перенаправить на указанный файл .php с помощью try_files, если запрошенный файл .php не найден?

Перенаправить на указанный файл .php с помощью try_files, если запрошенный файл .php не найден?

Используя nginx, я хотел бы перенаправить на /redirect.php с помощью try_files, если требуемый файл .php не найден. Правильный ли это способ сделать:

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

Однако, похоже, это не работает.

решение1

location \.php$означает, что каждый запрос, заканчивающийся .phpрасширением, будет обработан этим блоком.

Ваш try_filesнаходится не в том месте. Вам нужно разместить его либо под существующим location /блоком, либо в serverблоке.

решение2

Это то, что мы используем вSlickStackдля перенаправления любых несуществующих .phpзапросов в WordPress для обработки ошибок (и управления перенаправлением 301):

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

Обратите внимание, что многие ответы вращаются вокруг этого упоминания, fastcgi_intercept_errors on;однако это не обязательно при использовании try_filesмаршрутизации PHP-FPM здесь.

Ссылка:https://github.com/littlebizzy/slickstack/edit/master/modules/nginx/sites/production.txt

Связанный контент