如上所述,uri 不會傳遞給 nginx。我已經包含了整個“嘗試”塊來展示這一點。
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 配合使用,但現在不行了,而且由於HDD 崩潰,我丟失了舊的配置文件,這是我在將驅動器發回之前沒有備份的一個文件,因為我認為它會是這樣完全可以重寫它。
答案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;