如果未找到請求的 .php 文件,則使用 try_files 重定向到指定的 .php 檔案?

如果未找到請求的 .php 文件,則使用 try_files 重定向到指定的 .php 檔案?

使用 nginx,如果找不到所需的 .php 文件,我想使用 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$意味著每個以.phpextension結尾的請求都會被這個區塊處理。

你的try_files位置不對。您需要將其放置在現有location /塊下或塊上server

答案2

這就是我們正在使用的光滑堆疊將任何不存在的.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
...
}

請注意,許多答案都在提及這一點,但在此處使用 PHP-FPM 路由fastcgi_intercept_errors on;時則沒有必要。try_files

參考:https://github.com/littlebizzy/slickstack/edit/master/modules/nginx/sites/production.txt

相關內容