在SO上已经出现了几次,但是没有一个解决方案起作用.这是我目前拥有的:
location / {
try_files $uri $uri/ $uri.PHP;
}
location @PHP {
default_type application/x-httpd-PHP;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param QUERY_STRING $args;
fastcgi_pass unix:/var/run/PHP5-fpm.sock;
fastcgi_index index.PHP;
include fastcgi_params;
}
location ~ \.PHP${
#fastcgi_split_path_info ^(.+\.PHP)(/.+)$;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param QUERY_STRING $args;
fastcgi_pass unix:/var/run/PHP5-fpm.sock;
fastcgi_index index.PHP;
include fastcgi_params;
}
本示例包含两个选项.首先,编写第一个节以将URL / foo.PHP和URL / foo推入最终位置节.如果我将第一个节的try_files中的$uri.PHP替换为@PHP,则应将@PHP位置用于URL / foo.
对于@PHP位置,我尝试将SCRIPT_FILENAME设置为:
fastcgi_param SCRIPT_FILENAME "/usr/share/Nginx/html$uri.PHP";
fastcgi_param SCRIPT_FILENAME "$request_filename.PHP";
这些都不起作用.
在调试时,没有add_header行为URL / foo发出任何信息. Content-Type始终设置为application / octet-stream,有趣的是,它总是设法发回PHP文件的内容(下载了它).
我显然做错了什么,但是我什么都没看到.
最佳答案
叹.我知道如果我问这个,我会解决的.好的,这是解决方案:
原文链接:https://www.f2er.com/nginx/532430.html location / {
try_files $uri $uri/ @PHP;
}
location @PHP {
fastcgi_param SCRIPT_FILENAME "$document_root$uri.PHP";
fastcgi_param PATH_TRANSLATED "$document_root$uri.PHP";
fastcgi_param QUERY_STRING $args;
fastcgi_pass unix:/var/run/PHP5-fpm.sock;
fastcgi_index index.PHP;
include fastcgi_params;
}
location ~ \.PHP${
#fastcgi_split_path_info ^(.+\.PHP)(/.+)$;
fastcgi_pass unix:/var/run/PHP5-fpm.sock;
fastcgi_index index.PHP;
include fastcgi_params;
}
我在这里缺少的关键是fastcgi_param PATH_TRANSLATED“ $document_root $uri.PHP”;线.在这个问题中,我描述了一个场景,其中所有PHP请求都通过了最后一个节-这将消除对中间节的需要.那没有用,需要@PHP位置.
另外请注意,我切换到$document_root.讨论此问题的许多问题都使用文字文档根目录作为文档根目录,而不是变量.也许它在较早版本的Nginx中不存在(我正在使用1.4.6),但这是一种更好的方法.