Используя 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