2017-05-26 10 views
2

try_filesに使用して、フォルダ名とを抽出しますブランチ。したがって、私はbranch1,branch2などのような複数の支店を持つことがあります。nginxの場所ディレクティブは、私は現在、restfullアプリケーションのためのtry_filesと一緒に次の場所ディレクティブを使用してい

したがって、作成するすべてのブランチごとに手動でディレクティブを作成する必要があります。

この問題を回避するには、という正規表現を使用してブランチ名を抽出し、それをtry_filesディレクティブで使用します。だから私はすべての支店の世話をする単一の場所の指示によって管理される動的なシステムを持っていただろう。

今までtry_filesで正規表現を使用しようとすると、405または404エラーが発生します。 (@Richardスミスの回答に基づいて)

私の最後の試み:

location ~ ^(/branches/[^/]+/app/api)/ { 
    try_files $uri $uri/ $1/api.php$is_args$args; 
} 

URIのマッチングのための405(許可されていません)応答を返しました。

答えて

1

正規表現locationを使用している場合は、同時にパスをキャプチャできます。たとえば:

location ~ ^(/branches/[^/]+/app/api)/ { 
    try_files $uri $uri/ $1/api.php$is_args$args; 
} 

重要な注意:は正規表現locationにプレフィックスlocationからの変更は、評価順序を変更します。正規表現locationブロックが順番に評価されるため、location ~ \.php$ロケーションブロックの後にを配置しない限り、/branches/branchx/app/api/api.phpはこのlocationブロックと一致します。詳細はthis documentを参照してください。

+0

私にとってはうまくいかないようです。 '/ branches/branch1/app/api /'に例をあててみましたが、 '〜^(/ branches/[^ /] +/app/api )/ 'と' $ 1/app/api.php'を使ったtry_filesです。助言がありますか? –

+0

いくつかのオプションがありますが、問題を見ることなく、具体的な提案をすることは難しいです。あなたの質問の編集とあなたの事例の改善を検討するべきです。 –

+0

これで私はその質問を明確にしました。場所については、 'app'サブフォルダを追加しました。 –

関連する問題