私はウェブ上で他の何十もの質問や参考文献を見てきました-そして私のすべての計算により、私のセットアップはうまくいくはずですが、うまくいきません。
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を実行するにはどうすればよいですか?
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
try_files
は常に現在のコンテキストで実行されます。これがphp-scriptsをプレーンファイルとして提供する理由です。現在の場所にはfastcgi_pass
がありません。 try_files
は、単純ではなく疑わしいブロックを作成するので避けてください。
同時にregexp-locationsは通常の場所よりも優先されるため、順序を逆にしても何も変わりません。
個人的には、アドレスバーから.php
拡張子を非表示にしても、構成ファイルにコードが追加されるため、役に立たないと思います。