2017-06-02 28 views
1

如果我有以下配置,那麼請求/直接從服務器根目錄下載index.php文件(即不傳遞給php-fpm)。

server { 
    listen 127.0.0.1:8080; 
    root /home/hasib/playground/php/; 
    server_name test.test; 
    index index.php; 

    location/{ 
      try_files $uri $uri/index.php =404; 
    } 

    location ~ \.php$ { 
      include fastcgi_params; 
      fastcgi_pass unix:/run/php/php7.0-fpm.sock; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    } 
} 

但是,如果我改變try_files行這樣的:

  try_files $uri $uri/ =404; 

然後通過請求/,我越來越index.php文件的預期輸出(即PHP的加工輸出FPM)。

我也試圖把文件夾名稱中try_files這樣的:

  try_files $uri /myfolder/ =404; 

但請求/的時候,而不是myfolder目錄下試圖index.php文件即返回301重定向到/myfolder/

所以,我的問題是,是$uri/ Nginx的某種特殊語法?由於其他配置總是直接提供文件或重定向到我的文件夾。但通過包含$uri/,它會嘗試將index.php文件傳遞給php-fpm。

回答

1

您的第一個示例無效。 .php文件需要在另一個location中處理,因此必須是try_files語句的最後一個參數。有關更多信息,請參見this document

/結尾的任何文件參數都會檢查是否存在目錄,因此$uri/不是特殊的,但尾隨/是。這用於調用index處理。有關更多信息,請參閱this document

相關問題