実行しているいくつかの非CMSサイトでApache/mod_phpからNginxに切り替えることに興味があります。問題のサイトは完全に静的なHTMLファイルまたは単純なPHPのいずれかですが、共通しているのは、現在Apacheのmod_negotiationを使用して、ファイル拡張子なしでそれらを提供していることです。私は実際のコンテンツネゴシエーションには関心がありません。私はこれを使用しているので、URLでファイル拡張子を使用する必要はありません。
たとえば、/info/contact.php
のファイルには、/info/contact
のURLを介してアクセスします。
実際のファイルはその場所にある.php
ファイルですが、URLに拡張子を使用していません。これにより、URLが少し短くなり、クリーンになり、本質的に無意味な実装の詳細がユーザーに公開されなくなります。 Apacheでは、これに必要なのは、mod_negotiationを有効にし、サイトのオプションに+ MultiViewsを追加することだけです。 Nginxでは、なんとか書き直しますが、Nginxは初めてなので、その方法がよくわかりません。
これらのサイトは現在、NginxからApacheにプロキシされて正常に動作していますが、Nginx/fastcgiのみで実行してみたいと思います。私が拡張機能を使用している限り、これらはこのように正常に機能するため、fastcgiの側面はうまく機能しています。私の懸念は、これらの拡張機能を削除することだけです。
サブディレクトリの場合、URLではファイル名が常にではないことに注意することが重要です。あれは、
/foo/bar
は/foo/bar.php
または/foo/bar/index.php
を探す必要があります
/foo/
は/foo/index.php
を探す必要があります
Nginxでこれを達成する簡単な方法はありますか、それともApacheへのプロキシに固執する必要がありますか?
面倒な書き直しは必要ありません。 try_files これには完全に機能します。基本的には1行だけです。
server {
server_name foo.com;
root /your/root/path;
index index.php;
location /
try_files $uri.php $uri/ /notfound.html;
}
# Your standard PHP location and everything else is still required here.
}
または、次を使用することもできます。
try_files $uri $uri/ index.php;
index.phpの前に/
がないと、/foo/bar/index.php
が見つからない場合は/foo/bar/somethingelse.php
を検索します。 (ほとんどの人はフォールバックとして/index.php
を持っています。これは通常、wordpressおよび同様のCMSで機能するためです)。