如果未找到所需的 .php 文件,我想使用 nginx 使用 try_files 重定向到 /redirect.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;
但在使用 PHP-FPM 路由时这不是必需的try_files
。
参考:https://github.com/littlebizzy/slickstack/edit/master/modules/nginx/sites/production.txt