如上所述,uri 未传递给 nginx。我已包含整个“try”块来显示这一点。
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
set $page_to_view "/index.php";
try_files $uri $uri.php $uri/;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
所以它本质上是在说“哦,嘿,我们做了$uri.php并且该文件存在,让我们将它作为服务器而不是实际将它发送到php。”
我的 fpm 部分如下。
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
基本都是原厂的。所以我不明白为什么 nginx 不再这样做了。我知道它在 debian 下与 fastcgi 一起工作,但现在不行了,而且由于硬盘崩溃,我丢失了旧的配置文件,这是我在将驱动器送回之前没有备份的一个文件,因为我认为重写它是完全没问题的。
答案1
您没有说要加载什么 URI,但我假设它不是以 结尾.php
。
你的问题在于,你没有try_files
按照名称所暗示的那样从字面上理解这个指令。它专门用于尝试文件。文档中说try_files file ... uri;
,只有最后一个参数才会被视为回退,从而导致内部重写。最后一个参数之前的任何参数都会被测试为静态文件,如果找到,则会作为静态文件提供。
这意味着你可以做try_files $uri $uri/ $uri.php;
但你不能做try_files $uri $uri.php $uri/
答案2
尝试更换
location ~ \.php$ {
和
location ~ \.php {
并且 $document_root 是放置 php 文件的实际目录
例如
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;