/
の前に、\.php$
ロケーションディレクティブがスクリプトを受け取っていない理由を理解しようとしています。
以下は、nginxに使用している.confのサンプルです。 APIコードを実行しています。//domian.com/v#.#/endpoint/uri
私たちのdocument_rootはバージョン番号以下の1つのディレクトリです。 index.php
バージョンディレクトリ内に存在する:path/to/sites/public/v1.0/index.php
index index.php # <-- this is in here globally
location ~ ^/(?<version>v[\d\.]+) {
try_files $uri $version/index.php?$args;
# Why does this NOT work? The/stopping \.php$ from matching
# try_files $uri /$version/index.php?$args;
}
location ~ \.php$ {
fastcgi_pass php56;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
[...]
}
私はあらゆる種類のものを試してみたが、この作業を取得するように見えることはできません。私は/
を削除すると期待どおりに動作しますが、その後、私のSCRIPT_FILENAMEラインから変更します。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
へ:
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
をそして、これは直接PHPファイルの呼び出しを破る - 私はしたくない何かを。
編集:解決策:次のように回答しました。この問題は、一致の順序と関係していました。パターンマッチングが最初に検出され、最後に検出されません。
注文を変更しました。最初にtry_files
に失敗しました。パターンが明示的に/
で始まっているためです。
私が読んでいた:http://nginx.org/en/docs/http/request_processing.html
要求「/index.php」も、プレフィックスの場所にマッチしている「/」 最初にして、正規表現「(PHP)$。」によります。したがって、後者の場所によって処理されるのはであり、要求はlocalhost:9000で待機しているFastCGIサーバーに渡されます。
最初の 'location'セクションで' index index.php'を試しましたか? – miken32
あるいは、あなたの 'http'セクションだけで良いでしょう。 – miken32
動作しません。私はグローバルな 'index'命令を持っています。私はここに1つを追加しました。 Nginxは '/ v1.0/index.php'ファイルを静的ファイルとして取り出し、それを完全に表示しています(application/oct ... streamのダウンロードデフォルトを防ぐために' default_type text/plain'をグローバルに追加しました)。 – guice