nginx で Web ルート フォルダー外のフォルダーから PHP ファイルを提供する方法

nginx で Web ルート フォルダー外のフォルダーから PHP ファイルを提供する方法

URL にアクセスすると、www.example.gr送信できるフォームをロードしますwww.example.gr/php/mail.php

私のファイルとフォルダの構造は次のようになります

root folder ( /var/www/html/app/ ) with these files:

index.php
test.php
and a second folder (/var/www/html/assets/ ) with these files:

php/phpmailer/...
php/mail.php
vendor/...
js/...
images/...
css/...

私のnginxの設定は


    server {
      server_name example.gr www.example.gr;

      root /var/www/html/app/;
      index index.php index.html index.htm;

      location ^~ /php {
        root /var/www/html/assets/php;
        index mail.php mail.html;
        try_files $uri $uri/ /php/mail.php?q=$uri&$args;

          
        location ~* \.php(/|$) {
          fastcgi_pass unix:/run/php-fpm/www.sock;
          fastcgi_index mail.php;
          include /etc/nginx/fastcgi_params;
          fastcgi_param SCRIPT_FILENAME /var/www/html/assets/php$fastcgi_script_name;
          fastcgi_intercept_errors on;
        }
      }

      # location /php/ {
      #   alias /var/www/html/assets/php/;
      # }
      location /js/ {
        alias /var/www/html/assets/js/;
      }
      location /vendor/ {
        alias /var/www/html/assets/vendor/;
      }
      location /images/ {
        alias /var/www/html/assets/images/;
      }

      location / {
        #try_files $uri $uri/ =404;
        try_files $uri $uri/ /index.php?q=$uri&$args;
      }

      location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
      }
   }

ページはwww.example.grすべての画像、js、css ファイルとともに正常に読み込まれますが、送信が機能せず、アクセスするとwww.example.gr/php/mail.php404 エラーが発生します。

どうすれば動作させることができますか?

答え1

rootブロックのおよびブロックSCRIPT_FILENAMEの下の値がlocation ^~ /php正しくありません。

現在処理中のURIにはプレフィックスが含まれており/php/、値と組み合わせてrootパス名を形成します(説明したようにここphp) 。したがって、値に を含めないでくださいroot。そうしないと、パス名に が含まれ.../php/php/...、機能しなくなります。

試す:

location ^~ /php {
    root /var/www/html/assets;
    ...
    location ~* \.php(/|$) {
        ...
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

の値は、現在スコープ内にあるステートメント$document_rootの値と同じです。root

関連情報