2016-06-28 8 views
2

一部のPHP URLがNginxによって実行される代わりにダウンロードされています。私は正常に機能している既存のWebアプリケーションを持っています。私は、プライマリアプリケーションのフォルダ内に追加のマウントされたアプリケーションを追加することが任されています。これらのアプリケーションのそれぞれには、独自のフロントコントローラindex.phpスクリプトがあります。実行中ではなくダウンロードとしてPHP URLを提供するnginx

この設定では、$document_root/appの中にシンボリックリンクを作成しました。シンボリックリンクは、index.phpフロントコントローラを含むフォルダを指しています。

ほとんどのURLに移動すると、すべて正常に動作し、プライマリアプリケーションのフロントコントローラが実行され、予期した結果が得られます。存在しないアプリに移動すると、nginxから404 Not Foundが得られます。しかし、アプリケーションの1つに移動すると、ブラウザはアプリケーションフロントコントローラをダウンロードします。

root     /my/web/root; 

location/{ 
    try_files   $uri 
         /$server_name$uri 
         /shared$uri 
         /index.php$is_args$args; 
} 

location ~ [^/]\.php(/|$) { 
    disable_symlinks off; 
    fastcgi_split_path_info ^(.+\.php\b)(.*)$; 
    fastcgi_param  SERVER_NAME $host; 
    fastcgi_param  PATH_INFO $fastcgi_path_info; 
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param  SCRIPT_NAME /index.php; 
    fastcgi_index  index.php; 
    include    fastcgi.conf; 
    fastcgi_pass  php-fpm; 
} 

location ~ ^/app/([a-z-]+)(/.*)?$ { 
    try_files   $uri 
         /app/$1/index.php$is_args$args 
         =404; 
} 

ダウンロードをトリガするURL:/app/my-app/(存在)404エラー
URL:/app/foo/(存在しない)を実行
URL:/foo

+0

phpの場所を[location〜[^ /] \。php(/ | $) ' –

+0

に設定しようとしました。同じ結果.... –

答えて

2

.phpファイルを0で処理する必要がありますブロック。物事をより簡単にする共通の文書ルートがあります。

ただし、locationの指示についてはlook at this documentです。

の正規表現の場所はとみなされ、最初に一致する場所が要求の処理に使用されます。要するに

、あなたはあなたの.phpファイルが正しく処理されるようにする場合、前に、他の競合する正規表現の場所をlocation ~ [^/]\.php(/|$)ブロックを配置する必要があります。

+0

動作の変更はありません。明示的な '.../app/index.php' URLが実行され、暗黙の' .../app/'URLダウンロード、非アプリURLが実行されます。 –

+3

最後の 'try_files'ディレクティブにエラーがあります。 '= 404'を削除してください。 '/ app/$ 1/index.php $ is_args $ args'要素は、行の最後になければなりません。詳細については、[このドキュメント](http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files)を参照してください。 –

+1

'= 404'が何かを壊す理由:[try_files](http://nginx.org/ja/docs/http/ngx_http_core_module.html#try_files)は、現在のコンテキストで「そのリストから最初に見つかったファイル」を提供します" '/ app/my-app'の場合、そのコンテキストはPHPを処理しない' location〜^/app /([az - ] +)(/.*)?$ 'ブロックであるので、nginxは生の '/ app/my-app/index.php'ソースファイルです。ただし、try_filesリストの最後の項目は* redirected *になります。 '/ app/$ 1/index.php'が最後になると、PHPを処理する' location〜[^ /] \。php(/ | S) 'ブロックにリダイレクトされます。 my-appフロントコントローラが動作します。 –

関連する問題