2017-10-05 9 views
0

私はこのようなnginxのサーバー構成があります。Nginxサーバーブロックで一致する場所を変数として使用する方法はありますか?

server { 
    listen 80; 
    listen [::]:80; 
    root /var/www/html; 
    index index.php index.html index.htm; 
    server_name example.com www.example.com; 

    location /project1/public { 
    try_files $uri $uri/ /project1/public/index.php?$query_string; 
    } 

    location /project2/public { 
    try_files $uri $uri/ /project2/public/index.php?$query_string; 
    } 

    location /project3/public { 
    try_files $uri $uri/ /project3/public/index.php?$query_string; 
    } 

    location ~ \.php$ { 
    include snippets/fastcgi-php.conf; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    } 
} 

をし、それが動作します。しかし、これを動的に行うためにregex(以下のコード)を使用しようとすると、URLをブラウザに表示せずにダウンロードします。

server { 
    listen 80; 
    listen [::]:80; 
    root /var/www/html; 
    index index.php index.html index.htm; 
    server_name example.com www.example.com; 

    location ~ ^/([^/]+)/public { 
    try_files $uri $uri/ /$1/public/index.php?$query_string; 
    } 

    location ~ \.php$ { 
    include snippets/fastcgi-php.conf; 
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; 
    } 
} 

答えて

1

ロケーションブロックの順序を変更してみてください。

あなたはNginx Docs内の位置ブロックの順番/優先順位を確認する場合は、あなたの設定のために重要な2つのルールがあります。

  1. は、nginxのは、(/project1/publicのような)従来の場所のブロックを見つけた場合、それはありません検索を停止し、任意の正規表現と、もはや従来のブロックは、最初にマッチします

    - >あなたの最初の設定でそう、nginxのは、最初にあなたのphp-regex場所を発射し、それがtry_files

  2. 実行
  3. 正規表現は、設定ファイルに表示される順にチェックされます。正規表現の検索は最初の一致で終了し、対応する設定が使用されます。

    - > 2番目の設定では、あなたのphp-regextry_filesから使用されることはありません発見された最初の

関連する問題