Nginx
Nginx 沒有將 uri 傳遞給 php5-fpm,而是作為文本文件
如上所述,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 但現在不是完全可以重寫它。
你沒有說你要載入什麼 URI,但我會假設它不會以
.php
.您在這裡的問題是您並沒有
try_files
像名稱所暗示的那樣從字面上理解該指令。它是專門嘗試一個**文件。**它被記錄為try_files file ... uri;
意味著只有最後一個參數將被視為導致內部重寫的備份。最後一個參數之前的任何參數都作為靜態文件進行測試,如果找到,則作為靜態文件提供。這意味著你可以做
try_files $uri $uri/ $uri.php;
,但你不能做try_files $uri $uri.php $uri/