nginx의 웹 루트 폴더 외부 폴더에서 PHP 파일을 제공하는 방법

nginx의 웹 루트 폴더 외부 폴더에서 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 conf는


    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;
      }
   }

모든 이미지, js, css 파일이 포함된 페이지가 www.example.gr성공적으로 로드되지만 제출이 작동하지 않습니다. 이동하면 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

관련 정보