web-dev-qa-db-ja.com

nginxのURLとPHP拡張機能をクリーンアップ

私はウェブ上で他の何十もの質問や参考文献を見てきました-そして私のすべての計算により、私のセットアップはうまくいくはずですが、うまくいきません。

Php-fpmでnginxをインストールしています。 .phpファイルにアクセスしようとすると、正しく実行され、正しい結果が得られます。私は私の設定ファイルでこれを得ました:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

ここで、ブラウザのアドレスバーに/somedir/fileを表示したまま/somdir/file.phpが自動的に/somdir/fileを実行するようにWebアプリを設定したいと思います。だから私は以下を含むように私の設定を変更しました:

location / {
    try_files $uri $uri/ $uri.php?query_string
}

この種類は機能します。つまり、サーバーは.phpファイルにアクセスします。ただし、上記の既存のlocation ~ \.php$ブロックを使用して実行するのではなく、phpソースコードをブラウザへのダウンロードとして吐き出します。要求されたURLに手動で.phpを追加すると、phpが実行されます。

サーバーがtry_files$uri.phpに一致させると、PHPファイルで何をする必要があるかを確認するために、ロケーションで別のパスを実行しないかのように感じます。 phpブロックをlocation /の上下に配置してみましたが、違いはありません。

PHPを実行するにはどうすればよいですか?

3
Aleks G

rewriteディレクティブを試しましたか?例えば:

location / {
    try_files $uri $uri/ @extensionless-php;
    index index.html index.htm index.php;
} 

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

location @extensionless-php {
    rewrite ^(.*)$ $1.php last;
}

ソース: http://www.tweaktalk.net/60/nginx-remove-php-file-extension-from-url

5
martintama

try_filesは常に現在のコンテキストで実行されます。これがphp-scriptsをプレーンファイルとして提供する理由です。現在の場所にはfastcgi_passがありません。 try_filesは、単純ではなく疑わしいブロックを作成するので避けてください。

同時にregexp-locationsは通常の場所よりも優先されるため、順序を逆にしても何も変わりません。

個人的には、アドレスバーから.php拡張子を非表示にしても、構成ファイルにコードが追加されるため、役に立たないと思います。

1
drookie