2016-12-09 5 views
1

まず、私はむしろnginxの新機能だと言いたいのですが、私は先週のことを基本的に知っています。言っNginxの動的ロケーションのパス設定

、私は現在の標準構成でnginxのサーバーを持っている:

server { 
    listen 80; 
    server_name site.com; 

    root /var/www/site.com/; 
    index index.php; 

    location/{ 
    try_files $uri $uri/ /index.php; 
    } 

    location /microsite/first { 
    try_files $uri $uri/ /microsite/first/; 
    } 

    location /microsite/second { 
    try_files $uri $uri/ /microsite/second/; 
    } 

    ... 
} 

すべてのマイクロサイトのために、私は既存のものに追加しますが、これは、正常に動作し、それは新しい場所があることが必要新しいマイクロサイトのパスを参照して追加されました。

私の質問は:それは動的にそれがマイクロサイト/ディレクトリ内に存在するものは何でもサブディレクトリキャッチし、参照するような方法でlocationパラメータを設定することが可能でしょうか?

$1(.*)に渡されたサブディレクトリ名を捕まえることになるで

location ~ ^/microsite/(.*)$ { 
    try_files $uri $uri/ /microsite/$1/; 
} 

:(nginxのサイトから取られた)書き換えルールrewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;のラインに沿って何かが、同様に、locationパラメータに適用されますか? (それが動作しませんでしたが、私は、)私は別の(への答えを参照のうえに構築することをNginx dynamic location configuration質問をこのスニペットを試してみました)

また、私は正規表現の専門家ではないよ、私はそれを少し微調整しました過去ですが、それはもう少し前ですし、正確な用語を思い出さないので、おそらく問題の一部になるかもしれません。

とにかく、すべての助けに感謝します。
ありがとうございます!

答えて

1

を:

location ~ ^(/microsite/[^/]+) { 
    try_files $uri $uri/ $1/; 
} 

[^/]文字クラスが/ないものと一致しました

+0

あなたの提案をありがとうが、それは動作しませんでした。 あなたが書いたのと同じように 'location'ブロックを試しましたが、サイトにアクセスしようとすると' save file 'ウィンドウ(* index.php *ファイルをダウンロードしてしまいます。 – mformigo

+0

'location〜\ .php $'ブロックの後ろに置く必要があります。 'nginx'がリクエストをどのように処理するかについては、[このドキュメント](http://nginx.org/en/docs/http/request_processing.html)を参照してください。そして、最後の要素を '$ 1/index.php'を使って' index.php'に明示的にリンクさせたいかもしれません。 –

+0

ちょっとリチャード、不在の申し訳ありませんが、私は別のプロジェクトに巻き込まれ、今すぐこの問題に戻りました。私はちょうどあなたの素晴らしい助けを感謝したい=)あなたの提案はトリックでした。私が_nginx_のドキュメントで 'location'ブロックの優先順位付けを理解していると、' location'が設定したパスがより正確であれば、サーバールールの優先順位は高くなります!! ブロックは '〜'文字を前に持っていますが、とにかく言及したように 'location〜\ .php $'ブロックの後ろに置くとすごくうまくいっています。 – mformigo

0

の線に沿って何か試してみてください:あなたはおそらく、最初の2つのパスセグメントにキャプチャを制限する必要が

location ~ ^/microsite/(?<foo>.+)$ { 
    try_files $uri $uri/; 
    root /microsite/$foo; 
} 
+0

あなたのご意見もありがとうございますが、残念ながらそれも機能しませんでした。あなたが共有した 'location'ブロックが** 500 Internal サーバーエラー**。私はコードを使って作業をすることができたかどうかを調べ、500番は 'root/path/$ foo'行が原因であることを知りました。 '$ foo'変数を' try_files $ uri $ uri// path/$ foo'に置いてみました( 'root ...'行がコメントアウトされています)、 'save file ' 窓。 – mformigo