2017-06-02 9 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ファイルをしようと、/myfolder/に301リダイレクトを返しています。

私の質問は、$uri/ Nginxの特殊な構文ですか?他の設定は常にファイルを直接処理したり、myfolderにリダイレクトしたりするためです。しかし、$uri/を含めることによって、index.phpファイルをphp-fpmに渡そうとします。

答えて

1

最初の例は無効です。 .phpファイルは、locationで処理する必要があり、したがって、try_filesステートメントの最後のパラメーターである必要があります。詳細については、this documentを参照してください。

/で終わるファイルパラメータは、ディレクトリの存在をチェックするので、$uri/は特別なものではありませんが、末尾の/はです。これは、index処理を呼び出すために使用されます。詳細については、this documentを参照してください。