nginx+;不带.php扩展名的php fpm
这已经出现过好几次了,但没有一个解决方案奏效。这就是我目前拥有的:nginx+;不带.php扩展名的php fpm,php,nginx,Php,Nginx,这已经出现过好几次了,但没有一个解决方案奏效。这就是我目前拥有的: location / { try_files $uri $uri/ $uri.php; } location @php { default_type application/x-httpd-php; fastcgi_param SCRIPT_FILENAME $request_filename; fastcg
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。如果我用@php
替换第一节try_files
中的$uri.php
,那么它应该使用URL/foo的@php
位置
对于@php
位置,我已尝试将SCRIPT\u FILENAME
设置为:
fastcgi_param SCRIPT_FILENAME "/usr/share/nginx/html$uri.php";
fastcgi_param SCRIPT_FILENAME "$request_filename.php";
这些都不起作用
在调试过程中,没有任何add_header
行为URL/foo发出任何消息。内容类型总是设置为application/octetstream,有趣的是,它总是设法发回php文件的内容(它被下载)
我显然做错了什么,但我看不出是什么。唉。我知道如果我问这个问题,我会解决的。好了,这就是解决方案:
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\u param PATH\u翻译的“$document\u root$uri.php”代码>行。在这个问题中,我描述了一个场景,其中所有php请求都经过最后一节,这样就不需要中间一节了。这不起作用,需要@php
位置
另外请注意,我切换到了$document\u root
。讨论此问题的许多问题都使用文本文档根作为文档根,而不是变量。也许它在较旧版本的nginx中不存在(我使用的是1.4.6),但这是一种更好的方法